Java JDBC MySQL 例外: 「ResultSet が閉じられた後は操作は許可されません」
このエラーは通常、閉じられた ResultSet を操作しようとしたときに発生します。提供されたコードを分析して、例外の原因を特定しましょう。
データベースの初期化
MySQLDatabase クラスは、connect() メソッドでデータベースへの接続を確立します。ステートメント変数は connection.createStatement() で初期化されます。ただし、このステートメントは、選択クエリや更新クエリを含むすべてのデータベース操作で共有されます。
寄付処理
MySQLDonation クラスは、「寄付」テーブルを循環して寄付を処理します。記録。 while ループは、query("SELECT * FROM gieli436_purchases.donations") ステートメントから取得した ResultSet を繰り返します。
例外の原因
ステートメントが使用されているため、エラーが発生します。 ResultSet を取得するためのクエリは、前の ResultSet を閉じる削除クエリの実行にも使用されます。その結果、閉じられた ResultSet に対する後続の next() 呼び出しは、「ResultSet が閉じられた後は操作が許可されません」例外をスローします。
解決策
この問題を解決するには、クエリ実行ごとに新しいステートメント。 MySQLDatabase クラスを変更して、statement = connection.createStatement(); を削除します。 connect() から。クラス内のステートメントのすべてのインスタンスを 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(" ", "_")));
クエリごとに個別のステートメントを作成することで、ResultSet が確実に処理中は開いたままとなり、例外が発生しません。
以上がJava JDBC MySQL コードで「ResultSet クローズ後に操作は許可されません」がスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。