ResultSet を閉じた後に Java エラー操作が許可されない

Sheeraz Gul 2023年10月12日
  1. Java エラー java.sql.SQLException: ResultSet が閉じられた後、操作は許可されません
  2. Java エラー java.sql.SQLException: Operation not allowed after ResultSet closed を修正する
ResultSet を閉じた後に Java エラー操作が許可されない

このチュートリアルでは、Java での java.sql.SQLException: ResultSet が閉じられた後に操作は許可されません エラーについて説明します。

Java エラー java.sql.SQLException: ResultSet が閉じられた後、操作は許可されません

Operation Not Allowed After Resultset Closed というエラーは、クローズされた結果セットにアクセスしようとしたときの SQL 例外です。 Java Doc に記載されているように、ステートメント オブジェクトが閉じられるたびに、その Resultset オブジェクトが存在する場合は、それも閉じられます。

エラーの問題は、Resultset インスタンスが基礎となるステートメントも保存することです。 したがって、基になるステートメントが閉じられると、Resultset も閉じられ、エラーがスローされます。

同じエラーをスローするコードのスニペットを次に示します。

コード:

ResultSet Result_Set; // class variable

Statement Demo_Statement = null;
try {
  Demo_Statement = DB_Connection.createStatement();
  Result_Set = Demo_Statement.getGeneratedKeys();
} catch (Exception e) {
  throw e;
} finally {
  try {
    if (Demo_Statement != null)
      Demo_Statement.close();
  } catch (SQLException e) {
    throw e;
  }
}

System.out.println(Result_Set.next());

上記のデータベース接続のコードは、次のエラーをスローします。

java.sql.SQLException: Operation not allowed after ResultSet closed

Java エラー java.sql.SQLException: Operation not allowed after ResultSet closed を修正する

コードの問題は、Resultset の処理が完了する前にステートメント インスタンスを閉じることができないことです。 Resultset の処理が完了したら、Resultset とステートメント インスタンスの両方を閉じることができます。

ご覧のとおり、Result_Set.next() からブール値を出力しようとしていますが、Resultset も閉じているステートメント インスタンスを閉じた後に Resultset を使用しています。

上記のコードでは、この場所でステートメントを閉じないか、ステートメント インスタンスを閉じた後に Resultset を使用しないように修正します。 アプリケーションに基づいて、Demo_Statement.close() または System.out.println(Result_Set.next()); を削除できます。 声明。

コード:

ResultSet Result_Set; // class variable

Statement Demo_Statement = null;
try {
  Demo_Statement = DB_Connection.createStatement();
  Result_Set = Demo_Statement.getGeneratedKeys();
} catch (Exception e) {
  throw e;
} finally {
  try {
    if (Demo_Statement != null)
      Demo_Statement.close();
  } catch (SQLException e) {
    throw e;
  }
}

ステートメントインスタンスが閉じられた後、Resultset を使用しようとしている部分を削除しました。 Resultset ですべての操作が完了したら、ステートメント インスタンスと Resultset の両方を閉じることができます。

著者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

関連記事 - Java Error