# Datensätze effektiv einlesen



## texton (19. Jan 2009)

Ich möchte Datensätze möglichst effektiv in Arrays einlesen.

Ich stelle mir dazu ein mehrdimensionales Array vor, dessen Elemente jeweils ein Objekt-Array aufnehmen, das einen Datensatz repräsentiert. In einem Element dieses Objekt-Arrays kann ein weiteres Objekt-Array stehen, was Datensätze einer weiteren verknüpften Afrage aufnimmt.

Ist das wirklich effektiv oder kennt jemand bessere Methoden? Beispielcode?


----------



## Ebenius (19. Jan 2009)

Die Frage ist doch: Was willst Du eigentlich machen?


----------



## texton (19. Jan 2009)

Wie gesagt: Datensätze einlesen.

Über JDBC werden die Spalteninhalte ja als Strings eingelesen. Mit den entsprechenden Methoden, z. B. getInt(), kann ich die Zellenwerte gleich ins richtige Format bringen und so im Array speichern.

Die Datenbank soll eingelesen werden, z. B. SELECT * FROM tabelle. Das ResultSet wird der Reihe nach mit next() durchgegangen und jeder erhaltene Datensatz gespeichert. Bisher habe ich dazu Einzelanweisungen in ein Array geschrieben, z. B.:

```
class array // innere Klasse
{
   static String spalte1;
   static int spalte2;
   // usw.
}
int i = 0;
while( resultset.next() )
{
   array.spalte1[i] = resultset.getString( spalte1 );
   array.spalte2[i] = resultset.getInt( spalte 2 );
   // usw.
   ++i;
}
```
Jetzt möchte ich das Ganze über Objekt-Arrays lösen. Wenn ein eingelesener Wert true ist, soll ein Element, das ein weiteres Objekt-Array darstellt, Datensätze eines anderen ResultSets aufnehmen.

```
Object[] neu_array = new Object[anzahl_der_erhaltenen_datensätze_aus_resultset1];
Object[] neu_array2 = new Object[anzahl_der_erhaltenen_datensätze_aus_resultset2];
int i=0;
while( resultset.next() )
{
   neu_array[i] = resultset.getString( spalte 1 );
   neu_array[i] = resultset.getInt( spalte 2 );
   boolean b = resultset.getBoolean( spalte3 );
   if( b )
   {
	  resultset2.next();
      neu_array2[0] = resultset2.getString( spalte 1 );
      // usw.
	  System.arraycopy( neu_array2, 0, neu_array, 0, laenge );
   }
   else
   {
      Arrays.fill( neu_array2, "0" );
   }
}
```
Ich habe die Beispiele nicht auf syntaktische Korrektheit überprüft, hoffe aber, mein Gedanke dahinter ist klar geworden. Sortiert werden müssen die Elemente nicht, da sie bereits sortiert eingelesen werden. Ist meine Methode gut geeignet oder hat jemand Erfahrungen mit besseren, vielleicht über Collections?


----------



## Ebenius (19. Jan 2009)

Mit meiner Frage meinte ich eigentlich etwas anderes. Ob Felder als Kontainer für Daten geeignet sind oder nicht, hängt doch davon ab, was Du mit den Daten tun möchtest.


----------



## texton (19. Jan 2009)

Die Felder verwende ich im Programm der Einfachheit halber wie Variablen, also z. B. array.spalte1_. Nachteil: Ich habe die zu einem Datensatz gehörenden Elemente nicht in einem Objekt versammelt, sondern verwende einen Index i: array.spalte2, array.spalte3. Auch das hat Vorteile: spalte 1 hat bei mir den Inhalte der 1. Spalte für alle Datensätze usw. Nur widerspricht es eigentlich dem Grundsatz, dass zusammengehörige Daten auch zusammengehörig gespeichert werden sollten._


----------

