ホームページ > データベース > mysql チュートリアル > Java コードが「java.sql.SQLException: ResultSet が閉じられた後は操作が許可されていません」という例外をスローするのはなぜですか?

Java コードが「java.sql.SQLException: ResultSet が閉じられた後は操作が許可されていません」という例外をスローするのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-14 21:34:15
オリジナル
564 人が閲覧しました

Why Does My Java Code Throw a

「ResultSet クローズ後に操作は許可されない」例外を理解する

Java で SQL ステートメントを実行する場合、ResultSet オブジェクトを適切に管理することが重要です例外を避けるため。発生する一般的な例外の 1 つは、「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません。」です。

この例外は、ResultSet が閉じられた後に操作 (ResultSet からのデータのフェッチなど) が試行されたときに発生します。提供されたコード スニペットは、この問題を示しています。

例外の根本原因

コードでは、ステートメント オブジェクトを作成し、それを使用して 2 つのクエリを実行します。 1 つはユーザーの名前を取得するため、もう 1 つは「プロファイル」テーブルから ID を取得するためです。次に、同じ接続オブジェクトを使用して PreparedStatement を作成し、更新ステートメントを準備しようとします。

問題は、「プロファイル」の結果を反復する while ループ内で「getStuff()」メソッドにアクセスするときに発生します。テーブル。このメソッド内:

  1. クエリを実行し、ResultSet (rs) を取得します。
  2. 戻る前に ResultSet を閉じるのに失敗しました。

これこれは、一度に Statement オブジェクトごとに 1 つの ResultSet だけを開くことができるという要件に違反します。その結果、「getStuff()」メソッドの ResultSet は、メイン コードで作成された ResultSet オブジェクト (rs2) と競合します。

解決策

これを解決するには例外として、ResultSet オブジェクトを適切に管理する必要があります:

  1. から取得した ResultSet (rs) を閉じます。
  2. メイン コード内の ResultSet (rs) が不要になったら必ず閉じてください。

さらに、次のこともできます。メイン コードで使用される Statement オブジェクトとの潜在的な競合を避けるために、「getStuff()」メソッド用に新しい Statement オブジェクトを作成することを検討してください。

以上がJava コードが「java.sql.SQLException: ResultSet が閉じられた後は操作が許可されていません」という例外をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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