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

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

Barbara Streisand
Barbara Streisand原創
2024-11-02 03:56:03371瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn