ホームページ >データベース >mysql チュートリアル >JDBC で「ResultSet が閉じられた後は操作が許可されません」が発生する理由とその修正方法
MySQL Result Set が閉じた後は操作は許可されません
JDBC を使用してデータベースと対話する場合、ResultSet オブジェクトを慎重に扱うことが重要です。 「ResultSet を閉じた後は操作は許可されません」のような例外を避けてください。このエラーは、すでに閉じられている ResultSet に対して操作を実行しようとすると発生します。
例外について
例外は、ResultSet を反復処理しようとするとスローされます。 ResultSet は閉じられた後に next() メソッドを使用します。これは、ResultSet を閉じると内部カーソルを含むリソースが解放され、それ以降の操作が無効になるために発生します。
結果セットが閉じられる原因
提供されたコードの解決策
提供されたコード内のエラーは、 MySQLDonation クラスを使用して寄付テーブルを循環します。 SELECT クエリから取得された ResultSet は、後続の DELETE クエリに対して Statement が再実行されるときに閉じられます。
この問題を解決するには、クエリの実行と結果処理のステップを分離します。
// In MySQLDatabase class private void handleDonation(Client client, int creditamount) { try (Statement statement = getConnection().createStatement()) { // Execute DELETE query with new Statement statement.executeUpdate(String.format("DELETE ...")); } }
クエリごとに新しい Statement を作成すると、クエリが実行されるまで ResultSet が開いたままになります。完了しました。
追加メモ
以上がJDBC で「ResultSet が閉じられた後は操作が許可されません」が発生する理由とその修正方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。