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
DDDOriginal
2024-10-29 14:07:02973Durchsuche

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

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>

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>

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!

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