# ResultSet-Inhalt in Arrays schreiben



## terryl (11. Dez 2008)

Ich habe mir eine innere Klasse gemacht, die den Inhalt eines ResultSets aufnehmen soll:


```
static class DB
{
    static int[] Priority = null;
    static String[] ID = null;
    // usw.
}
```

Der Zugriff auf die Datenbank klappt, nur das Schreiben in die Arrays nicht. Gedacht ist, dass der gleiche Index eines der DB-Arrays die entsprechende Zeile des ResultSets repräsentiert.


```
try
{
    int i = 0;
    int j = 1;
    while( SQLResult.next() )
    {
        DB.Priority[ i ] = SQLResult.getInt( j ); // <-- Hier meldet Ecplise eine NullPointerException, aber wieso?
        DB.ID[ i ] = SQLResult.getString( ++j );
        DB.Description[ i ] = SQLResult.getString( ++j );
        // usw.
        ++i;
        j = 1;
}
catch( SQLException e )
{
    // Fehlerbehandlung
}
```


----------



## SlaterB (11. Dez 2008)

vielleicht ist Priority null,

wird irgendwann Priority = new int[34]; gesetzt?
mit welcher Größe initialisiert du überhaupt das Array, die kennst du doch sicher vorher nicht,

verwende lieber eine Liste, da kannst du beliebig viele Elemente reinschreiben,

EINE Liste/ Array statt drei wären besser, in diese Liste oder in das Array dann ein spezielles Objekt, welche alle drei Informationen aufnimmt


Variablen klein schreiben!


wozu der Aufwand mit ++j?
wenn du die Array-Namen usw. sowieso manuell kodieren musst, dann kannst du auch getInt(1), getString(2) usw. hinschreiben


----------



## terryl (11. Dez 2008)

> vielleicht ist Priority null,



Das könnte durchaus sein. Wieso aber kann ich keine "0" hineinschreiben?



> wird irgendwann Priority = new int[34]; gesetzt?



Versteh nicht, wie du auf diesen Wert kommst.



> mit welcher Größe initialisiert du überhaupt das Array, die kennst du doch sicher vorher nicht,



Wie du im Beispiel siehst, stehen alle auf "null", da ich ja die Endgröße nicht kenne.



> EINE Liste/ Array statt drei wären besser



Wäre eine Überlegung wert. Aber auch dann müsste ich erst das Objekt erstellen, dass der Liste jeweils hinzugefügt wird.



> Variablen klein schreiben!



Ich habe schon alle möglichen Programmierstile gesehen, und selbst SUN empfiehlt nur kleine Anfangsbuchstaben. Im Programmkontext hat mein Vorgehen durchaus Sinn.



> wozu der Aufwand mit ++j?



Ich dachte, das wäre klar geworden durch das Beispiel. Ein ResultSet stellt beim Auslesen jeden Eintrag nur einmal zur Verfügung (wenn man nichts anderes vorgibt). Ich muss deshalb für jede DB-Zeile (i) die einzelnen Spalten (j) durchgehen.


----------



## SlaterB (11. Dez 2008)

> Ich dachte, das wäre klar geworden durch das Beispiel.

wie gesagt: statt
getInt( j ); 
geht auch 
getInt( 1 ); 
aber das Thema ist ja egal

---------

> Das könnte durchaus sein. Wieso aber kann ich keine "0" hineinschreiben? 

ein null-Objekt ist einfach nicht da, da kann man nix reinschreiben,
die Array-Länge 34 war von mir willkürlich belegt und sollte auch das Delemma der unbekannten Länge aufzeigen

>  Aber auch dann müsste ich erst das Objekt erstellen, dass der Liste jeweils hinzugefügt wird. 

zeitlich spielen die paar Nanosekunden keine Rolle
und organisatorisch wirst du damit besser leben, da bin ich sicher

falls du nicht später mal alle Ids als Array übergeben musst oder so,
normalerweise ist es immer besser, zusammengehörige Daten auch zusammen abzulegen,

schau dir das ResultSet an: einmal next() aufgerufen und du hast die drei aktuellen Daten verfügbar,
wie schrecklich wäre es, drei Einzel-ResultSets pro Spalte zu haben, welches du jeweils unabhängig durch next()-Aufrufe vorwärts bewegen müsstest


----------

