Java - 连接关闭后无法使用结果集
问题:
尝试使用 JDBC 执行数据库查询会导致以下错误:
java.sql.SQLException: Operation not allowed after ResultSet closed
分析:
JDBC 使用 ResultSet 对象从查询中检索数据。但是,当与数据库的连接关闭时,ResultSet 对象将变得无效并且无法再使用。
解决方案:
要解决此问题,请避免通过ResultSet 对象超出执行查询的方法。相反,使用 ResultSet 填充对象或列表并返回结果对象。
填充对象的示例代码:
<code class="java">public static Collection<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); Collection<T> collection = new ArrayList<>(); while (rs.next()) { collection.add(rowMapper.mapRow(rs)); } // Close resources even if exceptions are thrown closeGracefully(rs, st, connection); return collection; }</code>
优雅地关闭资源:
<code class="java">private static void closeGracefully(ResultSet rs, Statement st, Connection connection) { if (rs != null) { try { rs.close(); } catch (SQLException e) { /* Log or ignore */ } } if (st != null) { try { st.close(); } catch (SQLException e) { /* Log or ignore */ } } if (connection != null) { try { connection.close(); } catch (SQLException e) { /* Log or ignore */ } } }</code>
其他注意事项:
以上是使用 JDBC 时,为什么我会收到'java.sql.SQLException:ResultSet 关闭后不允许操作”?的详细内容。更多信息请关注PHP中文网其他相关文章!