首頁 > 資料庫 > mysql教程 > 為什麼我在 Java JDBC 中收到'java.sql.SQLException: ResultSet 關閉後不允許操作”?

為什麼我在 Java JDBC 中收到'java.sql.SQLException: ResultSet 關閉後不允許操作”?

Linda Hamilton
發布: 2024-10-29 19:01:02
原創
828 人瀏覽過

Why Am I Getting

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板