ResultSet.getString() - Problem



  • Hallo zusammen!

    Wenn ich in WinSQL folgende Query ausführe:

    SELECT DW_KEY
    FROM KADSNT.AVPRIX.VDW0197
    WHERE USER_ID = 'KT1179'
    ORDER BY DW_KEY ASC
    WITH UR

    bekomme ich ein tadelloses Ergebniss. Die
    selbe Query lässt sich auch in meinem Programm
    ausführen, aber wenn ich versuche mir die
    Ergebnisse in Variablen zu ziehen gibts eine SQLException.
    Die getMessage Methode liefert nur null...

    Hier der Quelltext:

    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;
    
    // Hier zwischen wird noch das SQL erzeugt
    
    con = DbConnectionFactory.getConnection;
    stmt = con.createStatement();
    rs = stmt.executeQuery(sql);
    
    String[] tempErgebniss = null;
    
    int count = 0;
    
    while(rs.next()) {
    tempErgebniss[count] = rs.getString("DW_KEY"); // Hier kommt die Exception!
    count = count + 1;
    }
    
    rs.close();
    stmt.close();
    
    return tempErgebniss;
    

    Hat jemand eine Idee was ich falsch mache?

    Gruß,

    Woody



  • Bist du sicher, das du eine SQLException bekommst?

    String[] tempErgebniss = null; 
    
    int count = 0; 
    
    while(rs.next()) { 
    tempErgebniss[count] = rs.getString("DW_KEY"); // Hier kommt die Exception! 
    count = count + 1; 
    }
    

    Dein Ergebnisfeld ist mit null initialisiert.



  • Upsi!
    Hast Recht, ist eine normale Exception...

    Und wenn ich das so machen würde:

    while(rs.next()){
    tempErgebniss[count] = new String(rs.getString(DW_KEY"));
    count = count + 1;
    }
    

    Könnte das dann klappen?

    Gruß,

    Woody



  • Warum probierst du es nicht einfach? Noch schneller kann dir hier niemand helfen 🙂



  • Ok,

    ich hab das mit dem
    new String(rs.getString("DW_KEY"))
    ausprobiert. Das hat schonmal nicht geklappt...

    Ich würde das Array ja vorher initialisieren, aber die Anzahl der
    Datensätze die die Query liefert ist ja variabel...

    Ich möchte jetzt nicht alles auf ArrayList (ist ja variabel wenn
    ich mich recht entsinne) oder so umstellen...das wäre
    eine Heidenarbeit... oder ist das meine einzige Chance?

    Gruß,

    Woody



  • Anstatt die Werte in ein Array zu packen, kannst du sie auch in eine Collection, z.B. java.util.Vector packen. Dann bist du in der Größe Variabel.

    /Dirk



  • Hallo,

    ich habs jetzt mit Vectoren gelöst.
    Vielen Dank für eure Hilfe!

    Gruß,

    Woody



  • JDBC-Anfänger schrieb:

    Hallo,

    ich habs jetzt mit Vectoren gelöst.
    Vielen Dank für eure Hilfe!

    Gruß,

    Woody

    Da wäre ArrayList auch nicht mehr Arbeit gewesen...

    Und wenn's nicht threadsicher sein muß, isset auch erheblich schneller...

    Gut, die SQL-Abfrage wird hier eh der Flaschenhals sein...



  • Ich bins nochmal...

    Ich seh grade in der API zu ResultSet eine Funktion getFetchSize()...
    Hab ich das richtig verstanden (mein Fachenglisch ist nicht so doll), dass
    mir die Funktion die Anzahl der Rows im ResultSet zurückgibt?

    Dann hätte ich mir den ganzen Ärger nämlich sparen können, indem ich die
    Arrays mit dieser Zahl initialisiere...

    Gruß,

    Woody



  • Bei den Methoden in Resultset muss man immer vorsichtig sein. Manche DB-Treiber unterstützen die Funktionalität der API nicht im vollen Umfang. Probieren kannst du es allerdings allemal.


Anmelden zum Antworten