mysql的查询结果ResultSet处理

今天来分享一个大家可能会用到的东西,mysql查询结果的处理,当然,这个查询结果的处理指的不是说你业务上怎么处理,而是格式上的处理

目前有很多能够实现数据库交互的框架,很多框架用起来很方便,但,也不是任何时候都能去用一些框架,毕竟框架虽好,也得合适,就像开发语言,没有所谓的最好的开发语言,没有所谓的天下第一,只有合适与不合适,好了扯远了,开始正题

mysql查询结果的处理,对于框架,比如mybatis、mybatisplus、springdataJPA等等,都可以映射成一个实体类对象,我们可以很方便的处理,此处就不做讲解了,但是对于原生的JDBC来说,查询出来的结果可不是一个对象(我说的是原生JDBC,可不是spring整合的JDBC),而是一个 ResultSet

啧,这个ResultSet就是你给的SQL的查询结果了,这个时候如果你没有用过JDBC或者没解析过的就懵逼了,当你尝试去使用它的方法的时候,你会发现,这玩意是个啥,它的方法咋看起来都不像!!!

对,你没看错,你接收到的返回对象也没错,它就是一个ResultSet,这个结果集包含了你查询的所有结果,接下来告诉你怎么转换

想要获取你查询到的数据,你首先得拿到这个数据集对吧,ResultSet没有直接提供给你获取查询数据的方法,但给了你获取数据集的方法 .getMetaData()

获取到结果集之后,你就可以获取查询的条数,查询到的内容,字段名以及字段对应的值!

来,给你一份我之前写的共用方法,可以把ResultSet转换为Listt<Map>,我保证,你一看就懂

    /*
     * ResultSet----->Map
     * */
    public List<Map> ResultSetToMap(ResultSet resultSet) throws SQLException {
        List<Map> list = new ArrayList<>();
        ResultSetMetaData metaData = resultSet.getMetaData();
        int columnCount = metaData.getColumnCount();
        while (resultSet.next()) {
            Map<String, Object> jsonMap = new HashMap<>();
            for (int i = 1; i <= columnCount; i++) {
                String columnTypeName = metaData.getColumnTypeName(i);
                String columnName = metaData.getColumnName(i);
                if ("INT".equals(columnTypeName)) {
                    int anInt = resultSet.getInt(columnName);
                    jsonMap.put(columnName, anInt);
                } else {
                    String s = resultSet.getString(columnName);
                    jsonMap.put(columnName, s);
                }
            }
            list.add(jsonMap);
        }
        return list;
    }

是不是一看就懂,就是去遍历这个结果集,拿到字段名,根据字段名去拿值,最后收集起来,这里我对 int 类型做了处理,让他作为int取出,其他的类型我统一按照String处理了,当然,这个都可以处理,随你,看你的需要,总体的意思就是,你去遍历它,去取结果,就完事啦~

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Flink 中,关闭 ResultSet 的最佳实践是在 try-with-resources 语句块中使用。这样可以确保在任务执行结束后,ResultSet 可以被正确地关闭。以下是一个示例代码: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStreamSource<String> input = env.fromElements("query"); input.flatMap(new RichFlatMapFunction<String, String>() { private transient Connection connection; private transient Statement statement; @Override public void open(Configuration parameters) throws Exception { super.open(parameters); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "user", "password"); statement = connection.createStatement(); } @Override public void flatMap(String value, Collector<String> out) throws Exception { ResultSet resultSet = statement.executeQuery(value); while (resultSet.next()) { // 处理结果集 String result = resultSet.getString("column"); out.collect(result); } } @Override public void close() throws Exception { super.close(); if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } }); env.execute("MySQL Query Job"); ``` 在上述代码中,通过 `open()` 方法建立数据库连接并创建 Statement 对象,在 `flatMap()` 方法中执行查询处理结果集。在 `close()` 方法中,通过 `try-with-resources` 语句块来自动关闭 Statement 和 Connection 对象。 通过这种方式,可以确保 ResultSet 在任务执行结束后被正确关闭,从而释放资源并避免潜在的资源泄漏问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值