Heim > Datenbank > MySQL-Tutorial > Warum tritt bei der Wiederverwendung einer Anweisungsverbindung in Java die Meldung „Vorgang nach dem Schließen von ResultSet nicht zulässig' auf?

Warum tritt bei der Wiederverwendung einer Anweisungsverbindung in Java die Meldung „Vorgang nach dem Schließen von ResultSet nicht zulässig' auf?

DDD
Freigeben: 2024-12-16 17:44:12
Original
655 Leute haben es durchsucht

Why Does

Schließen des ResultSet vor der Wiederverwendung der Anweisungsverbindung

Bei der Java-Datenbankprogrammierung tritt gelegentlich eine Ausnahme auf, die auftritt, wenn eine vorbereitete Anweisung nach dem Schließen verwendet wird das ResultSet. Diese Ausnahme „Vorgang nach Schließen des ResultSets nicht zulässig“ tritt insbesondere dann auf, wenn dasselbe Verbindungsobjekt verwendet wird.

Im angegebenen Codeausschnitt wird nach dem Schließen der vorhandenen ResultSets eine neue vorbereitete Anweisung mit demselben Verbindungsobjekt erstellt (rs und rs2). Dies löst die Ausnahme aus. Um dieses Problem zu beheben und die Anweisungsverbindung wiederzuverwenden, empfiehlt es sich, zunächst sicherzustellen, dass alle vorherigen ResultSets, die mit der Anweisung verknüpft sind, geschlossen sind.

Ein empfohlener Ansatz ist die Verwendung eines Try-with-Resources-Blocks, der ResultSets automatisch schließt und Aussagen. Hier ist ein Beispiel:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

try (

    Statement statement = connection.createStatement();

    ResultSet rs = statement.executeQuery("SELECT `name` FROM `user` WHERE `id` = " + userId + " LIMIT 1;")

) {

    if (rs.next()) {

        // Process the results

    }

 

    try (

        ResultSet rs2 = statement.executeQuery("SELECT `id` FROM `profiles` WHERE `id` =" + profId + ";")

    ) {

        String updateSql = "INSERT INTO `blah` ...";

        PreparedStatement pst = (PreparedStatement) connection.prepareStatement(updateSql);

 

        while (rs2.next()) {

            // ...

        }

 

        pst.executeBatch();

    }

} catch (SQLException e) {

    e.printStackTrace();

}

Nach dem Login kopieren

In diesem Beispiel werden sowohl rs als auch rs2 in ihren jeweiligen Try-Blöcken geschlossen, bevor versucht wird, die Anweisung zum Vorbereiten eines neuen Stapels zu verwenden. Dadurch wird sichergestellt, dass vor der Ausführung der vorbereiteten Anweisung keine offenen ResultSets vorhanden sind.

Denken Sie daran, dass die Aufrechterhaltung aktiver ResultSet-Objekte für die korrekte Datenbankinteraktion von entscheidender Bedeutung ist. Priorisieren Sie immer die ordnungsgemäße Handhabung und Bereinigung von Ressourcen, um Ausnahmen zu vermeiden und die Datenintegrität sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum tritt bei der Wiederverwendung einer Anweisungsverbindung in Java die Meldung „Vorgang nach dem Schließen von ResultSet nicht zulässig' auf?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage