HOWTO · Java
Java-Fehler Operation nicht zulässig, nachdem ResultSet geschlossen wurde
In diesem Lernprogramm wird der Vorgang erläutert, der nach dem Fehler Resultset geschlossen in Java nicht zulässig ist.
Auf dieser Seite
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.