Heim  >  Artikel  >  Datenbank  >  Wie vermeide ich „java.sql.SQLException: Vorgang nach dem Schließen von ResultSet nicht zulässig' in Java?

Wie vermeide ich „java.sql.SQLException: Vorgang nach dem Schließen von ResultSet nicht zulässig' in Java?

Barbara Streisand
Barbara StreisandOriginal
2024-11-27 03:09:10558Durchsuche

How to Avoid `java.sql.SQLException: Operation not allowed after ResultSet closed` in Java?

Einen ResultSet zurückgeben

Beim Abfragen einer Datenbank ist es notwendig, die zurückgegebenen Ergebnisse effektiv zu verarbeiten. Ein häufiges Problem tritt auf, wenn versucht wird, ein ResultSet von einer Methode zurückzugeben, die die Datenbank abfragt. Die direkte Rückgabe eines ResultSet kann jedoch zu Ressourcenlecks und unsachgemäßer Ressourcenverwaltung führen.

Der Fehler „java.sql.SQLException: Operation notallowed after ResultSet close“ weist darauf hin, dass das ResultSet-Objekt geschlossen wurde, bevor die Methode dies konnte gib es zurück. Um dieses Problem zu beheben, wird empfohlen, das ResultSet einer Sammlung von Javabeans zuzuordnen und diese stattdessen zurückzugeben. Dieser Ansatz stellt sicher, dass das ResultSet nach der Verwendung automatisch geschlossen wird, wodurch Ressourcenlecks verhindert werden.

Ein Beispiel für die Zuordnung des ResultSet zu einer Liste von Javabeans finden Sie unten:

public List<Biler> list() throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<Biler> bilers = new ArrayList<Biler>();

    try {
        connection = database.getConnection();
        statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        resultSet = statement.executeQuery();

        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
    }

    return bilers;
}

Hier Beispielsweise fragt die Methode list() die Datenbank ab, ordnet die Ergebnisse einer Liste von Biler-Objekten zu und gibt die Liste zurück. Dadurch wird sichergestellt, dass das ResultSet ordnungsgemäß geschlossen wird und Ressourcenlecks verhindert werden.

Ein anderer Ansatz ist die Verwendung der try-with-resources-Anweisung, die die Ressourcen automatisch schließt, wenn der Codeblock abgeschlossen ist:

public List<Biler> list() throws SQLException {
    List<Biler> bilers = new ArrayList<Biler>();

    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        ResultSet resultSet = statement.executeQuery();
    ) {
        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    }

    return bilers;
}

Durch Befolgen dieser Empfehlungen können Entwickler sicherstellen, dass ResultSets ordnungsgemäß gehandhabt werden, Ressourcenlecks verhindert und ein effizienter Datenbankzugriff in Java-Anwendungen gewährleistet wird.

Das obige ist der detaillierte Inhalt vonWie vermeide ich „java.sql.SQLException: Vorgang nach dem Schließen von ResultSet nicht zulässig' in Java?. 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