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 區塊之外使用。解決方案:
<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>要避免此錯誤,您應該在資料庫連接範圍內基於 ResultSet 填充瞬態物件或集合。連線關閉後,可以毫無問題地返回或使用瞬態物件或集合。 重構程式碼:
以上是使用 JDBC 時,為什麼我的 Java 程式碼會拋出「結果集關閉後不允許操作」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!