Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

Barbara Streisand
Freigeben: 2024-11-02 03:56:03
Original
305 Leute haben es durchsucht

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
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!