Java JDBC MySQL 接続での ResultSet のクローズの処理
Java JDBC を使用して MySQL データベースを操作する場合、ResultSet のクローズを適切に管理することが重要です。 「ResultSet を閉じた後は操作は許可されません。」というエラーを回避するには。このエラーは、閉じた ResultSet に対して操作を実行しようとすると発生し、予期しない動作や誤ったクエリ結果が発生します。
問題の理解
提供されたコードでは、例外は、MySQLDonation クラスの while (results.next()) ループ内でトリガーされます。実際の原因は、同じ Statement オブジェクト (ステートメント) が SELECT クエリ (寄付を取得するため) と後続の DELETE クエリ (処理された寄付レコードを削除するため) の両方に使用されていることです。
解決策:クエリごとに新しい Statement を作成する
この問題を解決するには、クエリを実行するたびに新しい Statement オブジェクトを作成する必要があります。これにより、前の ResultSet が後続のクエリ実行によって自動的に閉じられなくなります。 MySQLDatabase クラスの変更点は次のとおりです。
public ResultSet query(String query) throws SQLException { Statement statement = connection.createStatement(); if (query.toLowerCase().startsWith("select")) { return statement.executeQuery(query); } else { statement.executeUpdate(query); } statement.close(); // Optional: May not be necessary as Resources are auto-closed return null; }
追加の考慮事項
Statement オブジェクトの管理に加えて、メモリの消費を防ぐために JDBC リソースを処理するためのベスト プラクティスに従うことが重要です。リークを防止し、適切なデータベース接続処理を保証します。以下に追加のヒントをいくつか示します。
結論
クエリごとに新しいステートメントを作成し、リソース管理を遵守することによってベスト プラクティスを実行すると、「ResultSet が閉じられた後は操作は許可されません」エラーを回避し、MySQL クエリを正しく実行できるようになります。効率と信頼性を高めるために、データベースの対話を継続的に最適化することを忘れないでください。
以上がJava JDBC MySQL で「ResultSet が閉じられた後は操作が許可されません」を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。