[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2002
    Beiträge
    46

    [Dringend][JT400,JDBC] Insert bricht mit 'Cursor state not valid' ab.

    Hallo,

    ich versuche hier in eine Tabelle zu schreiben. Aber obwohl der Insert-String sowohl syntaktisch Korrekt ist und von den Feldern her auch passt, kann ich nicht schreiben und erhalte nur die Fehlermeldung "Cursor state not valid"

    Wo liegt hier das Problem? Die Datenbankdatei wurde von mir erstellt und der zugriff erfolgt auch durch meinen user.

    Vielen Dank für die Hilfe,


    LoCal

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    Cursor state not valid deutet normalerweise auf einen Fehler in der Applikation hin, ohne Source geht da für uns garnix.

    mfg

    Dieter Bender

    Zitat Zitat von LoCal
    Hallo,

    ich versuche hier in eine Tabelle zu schreiben. Aber obwohl der Insert-String sowohl syntaktisch Korrekt ist und von den Feldern her auch passt, kann ich nicht schreiben und erhalte nur die Fehlermeldung "Cursor state not valid"

    Wo liegt hier das Problem? Die Datenbankdatei wurde von mir erstellt und der zugriff erfolgt auch durch meinen user.

    Vielen Dank für die Hilfe,


    LoCal
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Oct 2002
    Beiträge
    46
    Zitat Zitat von BenderD
    Hallo,

    Cursor state not valid deutet normalerweise auf einen Fehler in der Applikation hin, ohne Source geht da für uns garnix.

    mfg

    Dieter Bender

    Also den ganzen Quellcode kann ich logischerweise nicht posten.. darum poste ich mal das was ich in die engere Wahl ziehen.

    Ich habe mir mal schon vor längerer Zeit einen Klasse gemacht, die ich für den Zugriff auf versch. Datenbanken nutzen kann.

    Die Methode die fürs executes zuständig sieht wie folgt aus:
    Code:
    public void command(String sqlcmd) {
    	try {
    		java.sql.Statement st = c.createStatement();
    		st.executeQuery(sqlcmd);
    		st = null;
    	} catch (SQLException e) {
    		//Exception Handling
    	} 
    }

    Die, in der ich dann den Insert-String erstelle:
    Code:
     private void erstelleSQLStrings() {
            sqlStatements = new LinkedList();
            LinkedList sqlSatz = null;
            SQLElement tmp = null;
            for(int i = 0;i<Stat_vars.sqlSaetze.size();i++) {
                insertInto = new StringBuffer();
                values = new StringBuffer();
                sqlSatz = (LinkedList)Stat_vars.sqlSaetze.get(i);
                for(int j=0;j<sqlSatz.size();j++) {
                    tmp = (SQLElement)sqlSatz.get(j);
                    insertInto.append(tmp.getFeld()+", ");
                    values.append(tmp.getWert()+", ");
                }
                sqlStatements.add((new String("INSERT INTO "+ 
                        +Stat_vars.ZIELDATEI +" ("+insertInto.substring(0,insertInto.length()-2) + 
                        ") VALUES(" + values.substring(0,values.length()-2) + ")"))); 
            }

    Diese Methode übernimmt dann quasi das eintrage:
    Code:
    private void verarbeiteSQLStrings() {
            Stat_vars.verbindeDB();
            for(int i=0;i
    
    Und der daraus erzeugte SQL-String sieht wie folgt aus:
    Code:
     INSERT INTO GB311S (GLSS01, GLSS02, GLSS03, GLSS04, GLSS05, GLSS06, GLSS07, GLSS08, GLSS09, GLSS10, GLSS11) VALUES(85203879005, 20041208, 8500, 2011, 20041208, 0000, 'Müller', 51047, '3SPS80644954-001', '0', 'NixName')
    Wie gesagt in Sachen Feldtypen passt alles.

    Achja.. die von mir erwähnte Datenbankklasse ist ein statisches Object.

    Wie gesagt, das sind die "betroffenen" Teile.

  4. #4
    Registriert seit
    Oct 2002
    Beiträge
    46
    Zitat Zitat von BenderD
    Hallo,

    Cursor state not valid deutet normalerweise auf einen Fehler in der Applikation hin, ohne Source geht da für uns garnix.

    mfg

    Dieter Bender
    Hmm.. noch ne kleine Nachfrage:
    Also die Nachricht kommt ja von der "SQLException" und die bezieht sich ja quasi nur auf den SQL-String.
    Was halt also der eigentliche Quellcode damit zu tun?

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von LoCal
    Hmm.. noch ne kleine Nachfrage:
    Also die Nachricht kommt ja von der "SQLException" und die bezieht sich ja quasi nur auf den SQL-String.
    Was halt also der eigentliche Quellcode damit zu tun?
    Hallo,

    ich fange mal mit dem obigen an: Cursor state not valid deutet auf einen Folgefehler - z.B.: ein resultSet wird geschlossen und dann kommt Cursor state not valid beim next(). Auf deinen Fehler bezogen würde man diese Meldung erwarten, wenn man über ien ResultSet einfügt, was nicht der Fall ist, was ich aber ohne Quellcode nicht sehe.
    Bist du sicher, dass der Fehler beim Insert auftritt, oder könnte das nicht eins später sein?
    Bist du sicher, dass dein Statement lokale Variable ist?
    Ein Statement kann nämlich nur ein ResultSet und ein vorhandenes wird beim re execute geschlossen.
    Läuft das ganze im Multithreaded Umfeld? (Servlet, EJB o.ä.)

    mfg

    Dieter Bender
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Oct 2002
    Beiträge
    46
    Hallo,

    erstmal danke für die schnelle antwort. Also das mit dem String und seiner Übergabe bis zum "Ziel" passt. Das habe ich per debuggin verfolgt.
    Mittlerweile nehm ich auch nicht mehr executeQuery() (weiss selbst nicht warum ich das genommen habe), sondern executeUpdate() das liefert ja kein ResultSet zurück.
    Und es läuft auch ohne Exception-wurf durch, aber eingetragen werden die Daten immer noch nicht.

    Ich werde am Montag alles noch mal genau duruchchecken und nochmal hier rein posten.. die dringlichkeit is erstmal nicht mehr gegeben ...

    für jetzt schonmal vielen Dank und schönes Wochenende.

  7. #7
    Registriert seit
    Oct 2002
    Beiträge
    46
    So, habe nochmal alles soweit durchgesehen... also von der CodeSeite her passt es. Also das Problem liegt wohl auf der Maschinenseite. Die Datei hatte ich mit "Super-Base" erstellt.
    Werden eventuelle JDBC-Zugriffsprobleme auf der AS/400 irgendwo geloggt?

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo LoCal,

    log ist das Joblog des Database Server Jobs, aber da findest du auch nur Cursorstate not valid. Pack doch mal den Code, von dem du glaubst, dass er nicht funktioniert in ein kleines main; mit genau einem insert und dann poste mal diesen Code und die genaue Fehlermeldung, wenn es denn wirklich nicht funzt.

    Dieter Bender

    Zitat Zitat von LoCal
    So, habe nochmal alles soweit durchgesehen... also von der CodeSeite her passt es. Also das Problem liegt wohl auf der Maschinenseite. Die Datei hatte ich mit "Super-Base" erstellt.
    Werden eventuelle JDBC-Zugriffsprobleme auf der AS/400 irgendwo geloggt?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Oct 2002
    Beiträge
    46
    Okie.. es war ein Programm-fehler.

    Ich habe die Klasse, die ich mir mal für Datenbankzugriffe geschrieben habe, statisch geladen. Nun greift die zu erst auf eine Datei in Bibliothek A zu und die zu manipulirende Datei ist in Bibl. B.
    Wenn ich nun über die schon vorhandene Instanz der Datenbankzugriffsklasse arbeiten will geht nix.
    Ich habe jetzt noch eine eigene Instanz erstellt und nun gehts.
    Is zwar nicht so nach meinem Geschmack, aber vorerst bleibt es so weil es funzt.

    Danke nochmal für die Hilfe.

    LoCal

Similar Threads

  1. nach Insert neu gen. Datensatz ermitteln
    By M.Kasper in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 25-08-06, 07:32
  2. NOT NULL WITH DEFAULT
    By deni87991 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 04-08-06, 10:32
  3. Antworten: 3
    Letzter Beitrag: 06-06-06, 15:57
  4. Bender ich rufe dich Cursor state not valid
    By Deficiency in forum NEWSboard Java
    Antworten: 0
    Letzter Beitrag: 01-12-05, 12:40
  5. Embedded SQL - Datenbankoptionen in VARPG
    By woki in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 13-04-04, 12:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •