Java JDBC MySQL 異常:「結果集關閉後不允許操作」
嘗試對關閉的結果集進行操作時通常會發生此錯誤。讓我們分析提供的程式碼來確定異常的原因。
資料庫初始化
MySQLDatabase 類別在 connect() 方法中建立與資料庫的連線。語句變數是用connection.createStatement()初始化的。但是,此語句在所有資料庫操作中共用,包括選擇和更新查詢。
捐贈處理
MySQLDonation 類循環遍歷「捐贈」表並處理捐贈記錄。 while迴圈迭代從query("SELECT * FROM gieli436_purchases.donations")語句得到的ResultSet。
異常原因
發生錯誤的原因是使用了語句檢索 ResultSet 也用於執行刪除查詢,這會關閉先前的 ResultSet。因此,關閉的 ResultSet 的後續 next() 呼叫會拋出「ResultSet 關閉後不允許操作」例外。
解決方案
要解決此問題,請建立每個查詢執行一個新的語句。修改MySQLDatabase類,刪除statement = connection.createStatement();來自連線()。將類別中的所有statement實例替換為connection.createStatement()。
修正
// MySQLDatabase class // Remove statement = connection.createStatement(); // Replace statement with connection.createStatement() // MySQLDonation class // Remove private variable statement // Query execution results = connection.createStatement().executeQuery("SELECT * FROM gieli436_purchases.donations"); // Delete execution connection.createStatement().executeUpdate(String.format("DELETE FROM gieli436_purchases.donations WHERE donations.username='%s' LIMIT 1", client.playerName.replaceAll(" ", "_")));
透過為每個查詢建立單獨的Statement,您可以確保ResultSet處理期間保持開啟狀態,防止異常。
以上是為什麼我的 Java JDBC MySQL 程式碼拋出「結果集關閉後不允許操作」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!