# ResultSet Cachen



## mannni10 (10. Okt 2013)

Hallo zusammen,

leider habe ich zu diesem Thema bisher nichts gefunden das auf mein Problem passt.

Ich stehe for folgendem Problem:

Ich habe eine Methode die aus der Datenbank (zimelich viele Tabellen) Daten ausliest und diese als ResultSet zurückgibt.
Die Selects werden jeweils als String übergeben.

Da ja ResultSet bekanntlich geschlossen werden muss, tue ich das auch. Die Daten brauche ich aber trotzdem. Also habe ich beschlossen sie in einer Liste oder sowas zu speichern.

Also:
Gibt es eine möglichkeit unabhängig von der Länge des Selects die Daten aus dem ResultSet zu ziehen?

Um das verständlicher zu machen:

```
while(rs.next()){
String x = rs.getString(1)+";"+rs.getString(2)+";"+rs.getString(3);
list.add(x);
}
```

Wenn jetzt ein select mit 2 Strings kommt (SELECT NAME, VORNAME FROM TABELLE) dann läuft das dritte rs.getString in einen Fehler.

Wie kann ich das umgehen? Oder brauche ich jetzt für jede Tabelle eine eigene Select Methode?

Ich hoffe das ist einigermaßen verständlich.

viele Grüße & Danke im Vorraus


----------



## parabool (11. Okt 2013)

indem du Werte


```
List<List<String>> list = new ArrayList...
List<String> zeile= ...

zeile.add(rs.getString(1));
zeile.add(rs.getString(2));
zeile.add(rs.getString(3));

list.add(erg);
```

Als Datenstruktur für zeile würde ich aber eher eine Map nehmen.
Als key adnn der Feldname und als Value eben den Wert.


----------



## Bqg_stylo (12. Okt 2013)

> Wenn jetzt ein select mit 2 Strings kommt (SELECT NAME, VORNAME FROM TABELLE) dann läuft das dritte rs.getString in einen Fehler.



Dazu musst du vorher wissen wie viele Spalten dein ResultSet hat. Ein bisschen in der API lesen dann findest du die Methode 
	
	
	
	





```
getMetaData()
```
 welche ein MetaData Objekt zurück gibt und dieses Objekt wiederrum bietet die Methode 
	
	
	
	





```
getColumnCount()
```
.

Hier mein ungetestetes Beispiel:

```
int spaltenanzahl = rs.getMetaData().getColumnCount();
while(rs.next()){
String x="";
	for(int i=1; i<=spaltenanzahl;i++){
		x+=rs.getString(i); //String zusammenbauen aus den Spaltenergebnissen - alternative Schreibweise x=x+rs.getString(i);
	}
```

Jetzt meine Frage, was machst du wenn in der Tabelle mal anstelle eines Strings nen Integer kommt?
Oder ist das ResultSet so schlau und convertiert automatisch den Integer in nen String wenn du getString(Spaltenindex); aufrufst?


----------



## SnowFall (18. Okt 2013)

Du musst auch dran denken das Null Values vorkommen können, wenn du nicht explizit bei der erstellung deiner Datenbank Tabelle der Spalte "NOT NULL" angegeben hast.
dann musst du die entsprechende Spalte im ResultSet mit wasNull() auswerten, sonst gibts Fehler.
Bedenke das wasNull bezieht sich immer nur auf die zuletzt ausgeführte getXXX Methode des Resultsets.

Gruß Snow


----------

