开发者社区> 问答> 正文

DruidPooledResultSet-->ResultSetMetaData-->getColu

DruidPooledResultSet ps = connect.prepareStatement(sql); DruidPooledResultSet rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int count = rsmd.getColumnCount(); List columns = new ArrayList(); for(int i=1;i<=count;i++){ String column = rsmd.getColumnName(i);//@1 columns.add(column); } while(rs.next()){ JSONObject obj = new JSONObject(); for(String column:columns){ Object value = rs.getObject(column);//@2 obj.put(column, value); } }

在@1处getColumnName其实取的是originalColumnName的值不是数据库列字段columnName, 在@2取值使用originalColumnName获取对应字段值将为null

如何在@1取值取得columnName的值而不是originalColumnName呢?

原提问者GitHub用户kervin521

展开
收起
山海行 2023-07-05 19:55:12 53 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    根据您提供的信息,这个错误可能是由于ResultSet对象已经被关闭或者ResultSetMetaData对象已经被释放导致的。当您从数据库中读取数据时,ResultSet对象和ResultSetMetaData对象都是重要的对象,它们用于获取查询结果的元数据和数据值。如果ResultSet对象已经被关闭或者ResultSetMetaData对象已经被释放,您将无法获取查询结果的元数据和数据值,从而导致这个错误。

    为了解决这个问题,您可以尝试以下几个方法:

    确保ResultSet对象没有被关闭:在使用ResultSet对象之前,请确保它没有被关闭或者释放。如果ResultSet对象已经被关闭,您将无法获取其中的数据值和元数据信息。您可以使用ResultSet对象的isClosed方法来检查ResultSet对象是否已经被关闭。

    确保ResultSetMetaData对象没有被释放:在使用ResultSetMetaData对象之前,请确保它没有被释放。如果ResultSetMetaData对象已经被释放,您将无法获取其中的元数据信息。您可以使用ResultSetMetaData对象的getColumnCount方法来检查ResultSetMetaData对象是否已经被释放。

    确保您的代码中没有关闭ResultSet或ResultSetMetaData对象的语句:如果您的代码中包含关闭ResultSet或ResultSetMetaData对象的语句,您将无法再次使用这些对象。请确保您的代码中不包含关闭ResultSet或ResultSetMetaData对象的语句,或者在确保不再需要这些对象之前,不要关闭它们。

    确保您的代码中没有并发访问ResultSet或ResultSetMetaData对象的语句:如果多个线程同时访问同一个ResultSet或ResultSetMetaData对象,可能会导致这个错误。请确保您的代码中不包含并发访问ResultSet或ResultSetMetaData对象的语句,或者使用同步机制来避免并发访问。

    2023-07-30 15:06:42
    赞同 展开评论 打赏
  • rsmd.getColumnLabe(i)

    原回答者GitHub用户992013093

    2023-07-06 11:15:53
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载