Java:連線關閉後使用ResultSet 時發生錯誤
嘗試使用JDBC 從MySQL 資料庫擷取資料時,使用者可能會遇到下列錯誤: “java.sql.SQLException:結果集關閉後不允許執行操作。”當底層連接關閉後嘗試使用ResultSet 物件時,會發生這種情況。
說明
JDBC 基於延遲載入的概念進行操作,其中結果在請求之前不會完全檢索查詢。 ResultSet 物件在結果上提供了一個遊標,讓您可以迭代它們。但是,關閉建立 ResultSet 的連線也會關閉遊標,使其無法使用。
解決方案
要避免此錯誤,必須保持連接打開,直到不再需要 ResultSet 或使用不同的方法。
一種建議的方法是使用行映射器將結果集轉換為物件集合。此方法封裝了轉換過程,即使在連接關閉後也允許您存取結果:
<code class="java">public static List<T> sqlquery(String query, RowMapper<T> rowMapper) throws SQLException { try (Connection connection = DriverManager.getConnection(...); Statement st = connection.createStatement(); ResultSet rs = st.executeQuery(query)) { List<T> list = new ArrayList<>(); while (rs.next()) { list.add(rowMapper.mapRow(rs)); } return list; } }</code>
此修改後的程式碼使用try-with-resources 來確保連接、語句和結果集方法完成時自動關閉,消除了忘記手動關閉它們的可能性。此外,它使用行映射器將結果集中的每一行轉換為填充對象,然後可以將其收集到清單中。
結論
透過理解借助JDBC 的延遲載入機制並利用行映射器,開發人員可以有效地從資料庫檢索數據,同時避免連接關閉後與關閉結果集相關的錯誤。
以上是為什麼我在 Java JDBC 中收到'java.sql.SQLException: ResultSet 關閉後不允許操作”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!