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
根据您提供的信息,这个错误可能是由于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对象的语句,或者使用同步机制来避免并发访问。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。