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

為什麼我的 Java JDBC MySQL 程式碼拋出「結果集關閉後不允許操作」?

Patricia Arquette
發布: 2024-11-27 13:56:09
原創
280 人瀏覽過

Why Does My Java JDBC MySQL Code Throw

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

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