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

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

DDD
Freigeben: 2024-10-29 14:07:02
Original
1035 Leute haben es durchsucht

Why Am I Getting

Java – Ergebnissatz kann nach Verbindungsschließung nicht verwendet werden

Problem:

Ein Versuch dazu Das Ausführen einer Datenbankabfrage mit JDBC führt zu folgendem Fehler:

java.sql.SQLException: Operation not allowed after ResultSet closed
Nach dem Login kopieren

Analyse:

JDBC verwendet ein ResultSet-Objekt, um Daten aus einer Abfrage abzurufen. Wenn jedoch die Verbindung zur Datenbank geschlossen wird, wird das ResultSet-Objekt ungültig und kann nicht mehr verwendet werden.

Lösung:

Um dieses Problem zu beheben, vermeiden Sie die Übergabe das ResultSet-Objekt über die Methode hinaus, die die Abfrage ausgeführt hat. Verwenden Sie stattdessen das ResultSet, um ein Objekt oder eine Liste zu füllen und das resultierende Objekt zurückzugeben.

Beispielcode zum Auffüllen von Objekten:

<code class="java">public static Collection<T> sqlquery (String query, RowMapper<T> rowMapper) throws SQLException
{
    Connection connection=null;
    Statement st=null;
    ResultSet rs=null;     
    connection = DriverManager.getConnection("databaseadress","username","password");
    st = connection.createStatement();  
    rs = st.executeQuery(query);
    Collection<T> collection = new ArrayList<>();
    while (rs.next()) {
        collection.add(rowMapper.mapRow(rs));
    }
    // Close resources even if exceptions are thrown
    closeGracefully(rs, st, connection);
    return collection;
}</code>
Nach dem Login kopieren

Ressourcen ordnungsgemäß schließen :

<code class="java">private static void closeGracefully(ResultSet rs, Statement st, Connection connection) {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
    if (st != null) {
        try {
            st.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
    if (connection != null) {
        try {
            connection.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
}</code>
Nach dem Login kopieren

Zusätzliche Überlegungen:

  • Verwenden Sie einen Zeilen-Mapper, um Objekte aus jeder Zeile des ResultSet zu erstellen.
  • Abfragen parametrisieren, um SQL-Injection-Angriffe zu verhindern.
  • Erwägen Sie die Verwendung von Bibliotheken von Drittanbietern wie JDBC oder Spring JDBC für einen vereinfachten Datenbankzugriff.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich bei der Verwendung von 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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage