Heim > Datenbank > MySQL-Tutorial > Warum erhalte ich in Java JDBC die Fehlermeldung „java.sql.SQLException: Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde'?

Warum erhalte ich in Java JDBC die Fehlermeldung „java.sql.SQLException: Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde'?

Linda Hamilton
Freigeben: 2024-10-29 19:01:02
Original
848 Leute haben es durchsucht

Why Am I Getting

Java: Fehler bei der Verwendung von ResultSet nach Verbindungsschließung

Beim Versuch, Daten aus einer MySQL-Datenbank mithilfe von JDBC abzurufen, kann bei Benutzern der folgende Fehler auftreten: „java.sql.SQLException: Vorgang nach dem Schließen von ResultSet nicht zulässig.“ Dies tritt auf, wenn versucht wird, ein ResultSet-Objekt zu verwenden, nachdem die zugrunde liegende Verbindung geschlossen wurde.

Erklärung

JDBC arbeitet nach einem Konzept des verzögerten Ladens, bei dem die Ergebnisse von a Die Abfrage wird erst dann vollständig abgerufen, wenn sie angefordert wird. Das ResultSet-Objekt stellt einen Cursor über den Ergebnissen bereit, sodass Sie diese durchlaufen können. Durch das Schließen der Verbindung, die das ResultSet erstellt hat, wird jedoch auch der Cursor geschlossen, wodurch er unbrauchbar wird.

Lösung

Um diesen Fehler zu vermeiden, muss man entweder die Verbindung bis zum nächsten Schritt offen halten Das ResultSet wird nicht mehr benötigt oder Sie verwenden einen anderen Ansatz.

Ein empfohlener Ansatz besteht darin, einen Zeilen-Mapper zu verwenden, um den Ergebnissatz in eine Sammlung von Objekten zu konvertieren. Diese Methode kapselt den Konvertierungsprozess und ermöglicht Ihnen den Zugriff auf die Ergebnisse auch nach dem Schließen der Verbindung:

<code class="java">public static List<T> sqlquery(String query, RowMapper<T> rowMapper) throws SQLException {
    try (Connection connection = DriverManager.getConnection(...);
         Statement st = connection.createStatement();
         ResultSet rs = st.executeQuery(query)) {
        List<T> list = new ArrayList<>();
        while (rs.next()) {
            list.add(rowMapper.mapRow(rs));
        }
        return list;
    }
}</code>
Nach dem Login kopieren

Dieser modifizierte Code verwendet Try-with-Ressourcen, um sicherzustellen, dass die Verbindung, die Anweisung und die Ergebnismenge korrekt sind automatisch geschlossen, wenn die Methode abgeschlossen ist, sodass nicht vergessen wird, sie manuell zu schließen. Darüber hinaus wird eine Zeilenzuordnung verwendet, um jede Zeile im Ergebnissatz in ein ausgefülltes Objekt umzuwandeln, das dann in einer Liste gesammelt werden kann.

Fazit

Nach Verständnis Mit dem Lazy-Loading-Mechanismus von JDBC und der Verwendung von Row-Mappern können Entwickler effektiv Daten aus Datenbanken abrufen und gleichzeitig Fehler im Zusammenhang mit geschlossenen ResultSets nach dem Schließen der Verbindung vermeiden.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Java JDBC die Fehlermeldung „java.sql.SQLException: Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde'?. 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