executeUpdate "innerhalb" eines Resultsets

Nachtfalke

Aktives Mitglied
Hallo zusammen,

ich habe mal wieder ein Problem, daß sich per Google nicht lösen liess. Ich habe folgenden Code:
Java:
sQuery = myConn.createStatement();
      sInsert = myConn.createStatement();
      rsQuery = sQuery.executeQuery("select code from mytable");
      while (rsQuery.next()) {
        sCode = rsQuery.getString("code");
       
        try {
            sInsert.executeUpdate("insert into logs (code) values (" + sCode + ")");
          } catch(Exception e) {
          }
        }
      }
    } catch (Exception e) {
      Tools.errorPrint(e);
    }

Wenn die Schleife allerdings beim zweiten Mal an rsQuery.next() vorbeikommt, wird diese Exception geworfen:
Code:
SQLState:   XCL16
Severity: 20000
Message:  Das ResultSet ist nicht geöffnet. Die Operation 'next' ist unzulässig. Prüfen Sie, ob das automatische Festschreiben inaktiviert ist.
java.sql.SQLException: Das ResultSet ist nicht geöffnet. Die Operation 'next' ist unzulässig. Prüfen Sie, ob das automatische Festschreiben inaktiviert ist.

Hat jemand eine Idee, woran das liegen könnte?
 
Hallo Nachtfalke,

bekommst du den Fehler auch wenn du das zweite executeUpdate() auskommentierst?

Grüße
 
sind das nicht zwei Statements?
> sQuery = myConn.createStatement();
> sInsert = myConn.createStatement();
 
Wenn ich das executeUpdate auskommentiere, bekomme ich keinen Fehler. Das hatte ich vergessen, zu erwähnen. Aber die beiden Statements sollten doch unabhängig voneinander sein, oder?
 
die beiden mit == verglichen ergibt nicht zufällig true, weil myConn eine deiner eigenen Klassen ist die dasselbe Statement 2x zurückgibt? 😉
wenn möglich poste ein vollständiges Testprogramm

ansonsten bleibt dir vorerst, zunächst alle Ergebnisse der ersten Abfrage in eine Liste zu stecken,
 
Im Java Code machst Du ja gar nichts mit den Daten ausser von der DB zu lesen und sie in die DB zu schreiben. Warum machst Du das nicht mit einem Statement oder evtl. sogar direkt auf der DB? (Kenne die Möglichkeiten von Derby nicht)
 
Innerhalb der Schleife werden noch andere Daten ermitteln. Die werden aber nicht aus der DB, sondern aus einem String gelesen. Der Einfachheit halber habe ich das weggelassen. Es handelt sich nur um diverse Stringmanipulationen und Zuweisungen.
 
Ahhhhhhhhh ... manchmal ist man echt betriebsblind. Danke für den Tip. Es war tatsächlich ein fehlerhaftes Insert-Statement. 😳

Manchmal sieht man den Wald vor lauter Bäumen nicht mehr 🙂

Nichts desto trotz finde ich die Fehlermeldung dazu nicht wirklich passend und aussagekräftig.
 

Zurück
Oben