「ResultSet クローズ後に操作は許可されない」例外を理解する
Java で SQL ステートメントを実行する場合、ResultSet オブジェクトを適切に管理することが重要です例外を避けるため。発生する一般的な例外の 1 つは、「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません。」です。
この例外は、ResultSet が閉じられた後に操作 (ResultSet からのデータのフェッチなど) が試行されたときに発生します。提供されたコード スニペットは、この問題を示しています。
例外の根本原因
コードでは、ステートメント オブジェクトを作成し、それを使用して 2 つのクエリを実行します。 1 つはユーザーの名前を取得するため、もう 1 つは「プロファイル」テーブルから ID を取得するためです。次に、同じ接続オブジェクトを使用して PreparedStatement を作成し、更新ステートメントを準備しようとします。
問題は、「プロファイル」の結果を反復する while ループ内で「getStuff()」メソッドにアクセスするときに発生します。テーブル。このメソッド内:
これこれは、一度に Statement オブジェクトごとに 1 つの ResultSet だけを開くことができるという要件に違反します。その結果、「getStuff()」メソッドの ResultSet は、メイン コードで作成された ResultSet オブジェクト (rs2) と競合します。
解決策
これを解決するには例外として、ResultSet オブジェクトを適切に管理する必要があります:
さらに、次のこともできます。メイン コードで使用される Statement オブジェクトとの潜在的な競合を避けるために、「getStuff()」メソッド用に新しい Statement オブジェクトを作成することを検討してください。
以上がJava コードが「java.sql.SQLException: ResultSet が閉じられた後は操作が許可されていません」という例外をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。