ホームページ > データベース > mysql チュートリアル > Java JDBC MySQL コードで「ResultSet クローズ後に操作は許可されません」がスローされるのはなぜですか?

Java JDBC MySQL コードで「ResultSet クローズ後に操作は許可されません」がスローされるのはなぜですか?

Patricia Arquette
リリース: 2024-11-27 13:56:09
オリジナル
280 人が閲覧しました

Why Does My Java JDBC MySQL Code Throw

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート