Heim > Datenbank > MySQL-Tutorial > Warum tritt in JDBC das Problem „Vorgang nach dem Schließen von ResultSet nicht zulässig' auf und wie kann das Problem behoben werden?

Warum tritt in JDBC das Problem „Vorgang nach dem Schließen von ResultSet nicht zulässig' auf und wie kann das Problem behoben werden?

Linda Hamilton
Freigeben: 2024-11-26 16:32:10
Original
231 Leute haben es durchsucht

Why Does

Vorgang nach dem Schließen des MySQL-Ergebnissatzes nicht zulässig

Bei der Interaktion mit einer Datenbank über JDBC ist es wichtig, ResultSet-Objekte sorgfältig zu behandeln Vermeiden Sie Ausnahmen wie „Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde.“ Dieser Fehler tritt auf, wenn Sie versuchen, Vorgänge für ein ResultSet auszuführen, das bereits geschlossen wurde.

Die Ausnahme verstehen

Die Ausnahme wird ausgelöst, wenn Sie versuchen, über a zu iterieren ResultSet mit seiner next()-Methode, nachdem es geschlossen wurde. Dies geschieht, weil durch das Schließen eines ResultSets dessen Ressourcen, einschließlich seines internen Cursors, freigegeben werden, wodurch es für weitere Vorgänge ungültig wird.

Ursachen für geschlossene Ergebnismengen

  • Expliziter Aufruf die close()-Methode für das ResultSet
  • Erneutes Ausführen von Abfragen für dieselbe Anweisung Objekt
  • Verwenden des Statement-Objekts zum Erstellen mehrerer ResultSets

Lösung im bereitgestellten Code

Der Fehler im bereitgestellten Code tritt innerhalb der auf MySQLDonation-Klasse beim Durchlaufen der Spendentabelle. Das aus der SELECT-Abfrage erhaltene ResultSet wird geschlossen, wenn die Anweisung für nachfolgende DELETE-Abfragen erneut ausgeführt wird.

Um dieses Problem zu beheben, trennen Sie die Schritte der Abfrageausführung und der Ergebnisverarbeitung:

// In MySQLDatabase class
private void handleDonation(Client client, int creditamount) {
    try (Statement statement = getConnection().createStatement()) {
        // Execute DELETE query with new Statement
        statement.executeUpdate(String.format("DELETE ..."));
    }
}
Nach dem Login kopieren

Indem Sie für jede Abfrage eine neue Anweisung erstellen, stellen Sie sicher, dass das ResultSet geöffnet bleibt, bis die Abfrage abgeschlossen ist.

Zusätzlich Hinweise

  • Erwägen Sie die Verwendung von Try-with-Resources-Blöcken, um Anweisungen und Ergebnismengen automatisch zu schließen.
  • Wenn Sie über mehrere ResultSets iterieren müssen, führen Sie diese auf verschiedenen Statement-Objekten aus .
  • Best Practices für den Umgang mit ResultSets finden Sie in der JDBC-Dokumentation.

Das obige ist der detaillierte Inhalt vonWarum tritt in JDBC das Problem „Vorgang nach dem Schließen von ResultSet nicht zulässig' auf und wie kann das Problem behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage