如何避免Java中的「java.sql.SQLException:ResultSet關閉後不允許操作」?

Barbara Streisand
發布: 2024-11-27 03:09:10
原創
555 人瀏覽過

How to Avoid `java.sql.SQLException: Operation not allowed after ResultSet closed` in Java?

傳回結果集

在查詢資料庫時,需要有效處理傳回的結果。當嘗試從查詢資料庫的方法傳回 ResultSet 時,會出現一個常見問題。但是,直接返回 ResultSet 會導致資源洩漏和資源管理不當。

錯誤「java.sql.SQLException:ResultSet 關閉後不允許操作」表明 ResultSet 物件在該方法可以關閉之前已關閉返回它。要解決此問題,建議將 ResultSet 對應到 Javabean 集合並傳回它。這種方法確保 ResultSet 在使用後自動關閉,防止資源洩漏。

下面提供如何將ResultSet 對應到Javabean 列表的範例:

public List<Biler> list() throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<Biler> bilers = new ArrayList<Biler>();

    try {
        connection = database.getConnection();
        statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        resultSet = statement.executeQuery();

        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
    }

    return bilers;
}
登入後複製

在此例如,list() 方法查詢資料庫,將結果對應到Biler 物件列表,然後傳回該列表。這可以確保 ResultSet 正確關閉並防止資源洩漏。

另一種方法是使用try-with-resources 語句,該語句會在程式碼區塊完成時自動關閉資源:

public List<Biler> list() throws SQLException {
    List<Biler> bilers = new ArrayList<Biler>();

    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        ResultSet resultSet = statement.executeQuery();
    ) {
        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    }

    return bilers;
}
登入後複製

透過遵循這些建議,開發人員可以確保正確處理ResultSet,防止資源洩漏並確保Java 應用程式中高效的資料庫存取。

以上是如何避免Java中的「java.sql.SQLException:ResultSet關閉後不允許操作」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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