Java-Fehler Operation nicht zulässig, nachdem ResultSet geschlossen wurde

Sheeraz Gul 12 Oktober 2023
  1. Java-Fehler java.sql.SQLException: Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde
  2. Behebung des Java-Fehlers java.sql.SQLException: Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde
Java-Fehler Operation nicht zulässig, nachdem ResultSet geschlossen wurde

Dieses Tutorial demonstriert den Fehler java.sql.SQLException: Vorgang nicht erlaubt, nachdem ResultSet geschlossen wurde in Java.

Java-Fehler java.sql.SQLException: Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde

Der Fehler Operation Not Allowed After Resultset Closed ist eine SQL-Ausnahme, wenn wir versuchen, auf eine geschlossene Ergebnismenge zuzugreifen. Wie das Java-Dokument erwähnt, wird jedes Mal, wenn ein Anweisungsobjekt geschlossen wird, wenn sein Resultset-Objekt existiert, es auch geschlossen.

Das Problem mit dem Fehler ist, dass die Instanz Resultset auch die zugrunde liegende Anweisung speichert. Wenn also die zugrunde liegende Anweisung geschlossen wird, wird auch das Resultset geschlossen, was den Fehler auslöst.

Hier ist ein Codeausschnitt, der denselben Fehler auslöst.

Code:

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());

Der obige Code mit einer Datenbankverbindung löst den folgenden Fehler aus.

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

Behebung des Java-Fehlers java.sql.SQLException: Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde

Das Problem im Code ist, dass wir die Anweisungsinstanz nicht schließen können, bevor wir mit Resultset fertig sind. Sobald wir mit Resultset fertig sind, können wir sowohl Resultset als auch Statement Instance schließen.

Wie wir sehen können, versuchen wir, den booleschen Wert von Result_Set.next() zu drucken, aber wir verwenden das Resultset nach dem Schließen der Anweisungsinstanz, wodurch auch das Resultset geschlossen wird.

Im obigen Code besteht die Lösung darin, die Anweisung an dieser Stelle nicht zu schließen oder das Resultset nach dem Schließen der Anweisungsinstanz nicht zu verwenden. Abhängig von Ihrer Anwendung können wir entweder das Demo_Statement.close() oder das System.out.println(Result_Set.next()); entfernen. Stellungnahme.

Code:

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;
  }
}

Wir haben gerade den Teil entfernt, in dem wir versuchen, das Resultset zu verwenden, nachdem die Anweisungsinstanz geschlossen wurde. Sobald alle Operationen mit Resultset abgeschlossen sind, können wir sowohl die Anweisungsinstanz als auch Resultset schließen.

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

Verwandter Artikel - Java Error