JDBC ResultSet 错误:“结果集关闭后不允许操作”
在 Java 中,使用 JDBC 连接数据库并通过以下方式执行查询如果连接过早关闭,ResultSet 可能会导致错误。
原因:
JDBC ResultSet 不是查询结果的完整表示。相反,它提供了与数据库的实时连接,允许您逐行获取结果。如果连接关闭,ResultSet 将失去连接并变得无效。
错误消息:
java.sql.SQLException: Operation not allowed after ResultSet closed
代码示例:
以下代码演示了错误:
<code class="java">ResultSet rs = null; Connection connection = null; Statement st = null; try { connection = DriverManager.getConnection("databaseadress","username","password"); st = connection.createStatement(); rs = st.executeQuery(query); } catch (...) {} // exception handling finally { if (rs != null) rs.close(); if (st!= null) st.close(); if (connection != null) connection.close(); }</code>
在此代码中,发生错误是因为即使在连接关闭后,rs 仍在finally 块之外使用。
解决方案:
要避免此错误,您应该在数据库连接范围内基于 ResultSet 填充瞬态对象或集合。连接关闭后,可以毫无问题地返回或使用瞬态对象或集合。
重构代码:
<code class="java">public static <T> List<T> sqlquery (String query, RowMapper<T> rowMapper) throws SQLException { Connection connection = null; Statement st = null; ResultSet rs = null; connection = DriverManager.getConnection("databaseadress","username","password"); st = connection.createStatement(); rs = st.executeQuery(query); List<T> list = new ArrayList<>(); while (rs.next()) { list.add(rowMapper.mapRow(rs)); } if (rs != null) rs.close(); if (st != null) st.close(); if (connection != null) connection.close(); return list; }</code>
以上是使用 JDBC 时,为什么我的 Java 代码会抛出'结果集关闭后不允许操作”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!