Heim >Datenbank >MySQL-Tutorial >Warum löst mein Java-JDBC-MySQL-Code „Vorgang nicht zulässig, nachdem ResultSet geschlossen' aus?

Warum löst mein Java-JDBC-MySQL-Code „Vorgang nicht zulässig, nachdem ResultSet geschlossen' aus?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 13:56:09244Durchsuche

Why Does My Java JDBC MySQL Code Throw

Java JDBC MySQL-Ausnahme: „Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde“

Dieser Fehler tritt häufig auf, wenn versucht wird, mit einem geschlossenen ResultSet zu arbeiten. Analysieren wir den bereitgestellten Code, um die Ursache der Ausnahme zu identifizieren.

Datenbankinitialisierung

Die MySQLDatabase-Klasse stellt in der connect()-Methode eine Verbindung zur Datenbank her. Die Anweisungsvariable wird mit Connection.createStatement() initialisiert. Diese Anweisung gilt jedoch für alle Datenbankvorgänge, einschließlich Auswahl- und Aktualisierungsabfragen.

Spendenverarbeitung

Die MySQLDonation-Klasse durchläuft die Tabelle „Spenden“ und verarbeitet Spenden Aufzeichnungen. Die while-Schleife durchläuft das ResultSet, das aus der Abfrageanweisung („SELECT * FROM gieli436_purchases.donations“) erhalten wurde.

Ausnahmeursache

Der Fehler tritt auf, weil die Anweisung verwendet wurde zum Abrufen des ResultSet wird auch zum Ausführen der Löschabfrage verwendet, die das vorherige ResultSet schließt. Infolgedessen lösen nachfolgende next()-Aufrufe für das geschlossene ResultSet die Ausnahme „Vorgang nach geschlossenem ResultSet nicht zulässig“ aus.

Lösung

Um dieses Problem zu beheben, erstellen Sie eine neue Anweisung für jede Abfrageausführung. Ändern Sie die MySQLDatabase-Klasse, um „statement = Connection.createStatement();“ zu entfernen. von connect(). Ersetzen Sie alle Instanzen der Anweisung in der Klasse durch „connection.createStatement()“.

Korrekturen

// MySQLDatabase class
// Remove statement = connection.createStatement();
// Replace statement with connection.createStatement()

// MySQLDonation class
// Remove private variable statement

// Query execution
results = connection.createStatement().executeQuery("SELECT * FROM gieli436_purchases.donations");

// Delete execution
connection.createStatement().executeUpdate(String.format("DELETE FROM gieli436_purchases.donations WHERE donations.username='%s' LIMIT 1", client.playerName.replaceAll(" ", "_")));

Indem Sie für jede Abfrage separate Anweisungen erstellen, stellen Sie sicher, dass das ResultSet bleibt während der Verarbeitung geöffnet und verhindert so die Ausnahme.

Das obige ist der detaillierte Inhalt vonWarum löst mein Java-JDBC-MySQL-Code „Vorgang nicht zulässig, nachdem ResultSet geschlossen' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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