首頁 > 資料庫 > mysql教程 > 使用 JDBC 時,為什麼我的 Java 程式碼會拋出「結果集關閉後不允許操作」錯誤?

使用 JDBC 時,為什麼我的 Java 程式碼會拋出「結果集關閉後不允許操作」錯誤?

Barbara Streisand
發布: 2024-11-02 03:56:03
原創
395 人瀏覽過

Why does my Java code throw a

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

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