傳回結果集
在查詢資料庫時,需要有效處理傳回的結果。當嘗試從查詢資料庫的方法傳回 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中文網其他相關文章!