Java - 連線關閉後無法使用結果集
問題:
問題:java.sql.SQLException: Operation not allowed after ResultSet closed
嘗試使用JDBC執行資料庫查詢會導致下列錯誤:
分析:JDBC 使用ResultSet 物件從查詢中擷取資料。但是,當與資料庫的連線關閉時,ResultSet 物件將變得無效且無法再使用。
解決方案:要解決此問題,請避免透過ResultSet 物件超出執行查詢的方法。相反,使用 ResultSet 填入物件或清單並傳回結果物件。
<code class="java">public static Collection<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); Collection<T> collection = new ArrayList<>(); while (rs.next()) { collection.add(rowMapper.mapRow(rs)); } // Close resources even if exceptions are thrown closeGracefully(rs, st, connection); return collection; }</code>
填充物件的範例程式碼:
<code class="java">private static void closeGracefully(ResultSet rs, Statement st, Connection connection) { if (rs != null) { try { rs.close(); } catch (SQLException e) { /* Log or ignore */ } } if (st != null) { try { st.close(); } catch (SQLException e) { /* Log or ignore */ } } if (connection != null) { try { connection.close(); } catch (SQLException e) { /* Log or ignore */ } } }</code>
優雅地關閉資源:
以上是使用 JDBC 時,為什麼我會收到「java.sql.SQLException:ResultSet 關閉後不允許操作」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!