HOWTO · Java

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

このチュートリアルでは、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 の両方を閉じることができます。