Heim  >  Artikel  >  Datenbank  >  Warum gibt mein Java-Code bei der Verwendung von JDBC den Fehler „Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde“ aus?

Warum gibt mein Java-Code bei der Verwendung von JDBC den Fehler „Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde“ aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 03:56:03306Durchsuche

Why does my Java code throw a

JDBC ResultSet-Fehler: „Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde“

In Java wird JDBC verwendet, um eine Verbindung zu einer Datenbank herzustellen und Abfragen auszuführen Ein ResultSet kann zu Fehlern führen, wenn die Verbindung vorzeitig geschlossen wird.

Ursache:

Das JDBC ResultSet ist keine vollständige Darstellung der Abfrageergebnisse. Stattdessen stellt es eine Live-Verbindung zur Datenbank bereit, sodass Sie Ergebnisse Zeile für Zeile abrufen können. Wenn die Verbindung geschlossen wird, verliert das ResultSet seine Verbindung und wird ungültig.

Fehlermeldung:

java.sql.SQLException: Operation not allowed after ResultSet closed

Codebeispiel:

Der folgende Code veranschaulicht den Fehler:

<code class="java">ResultSet rs = null;
Connection connection = null;
Statement st = null;
try {
    connection = DriverManager.getConnection("databaseadress","username","password");
    st = connection.createStatement();  
    rs = st.executeQuery(query);
} catch (...) {} // exception handling
finally {
    if (rs != null) rs.close();
    if (st!= null) st.close();
    if (connection != null) connection.close();
}</code>

In diesem Code tritt der Fehler auf, weil rs immer noch außerhalb des „finally“-Blocks verwendet wird, auch nachdem die Verbindung geschlossen wurde.

Lösung:

Um diesen Fehler zu vermeiden, sollten Sie ein transientes Objekt oder eine Sammlung basierend auf dem ResultSet innerhalb des Datenbankverbindungsbereichs füllen. Sobald die Verbindung geschlossen ist, kann das transiente Objekt oder die transiente Sammlung problemlos zurückgegeben oder verwendet werden.

Umstrukturierter Code:

<code class="java">public static <T> List<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);
    List<T> list = new ArrayList<>();
    while (rs.next()) {
        list.add(rowMapper.mapRow(rs));
    }
    if (rs != null) rs.close();
    if (st != null) st.close();
    if (connection != null) connection.close();
    return list;
}</code>

Das obige ist der detaillierte Inhalt vonWarum gibt mein Java-Code bei der Verwendung von JDBC den Fehler „Vorgang nicht zulässig, nachdem ResultSet geschlossen wurde“ 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