# Anzahl der Elemente im ResultSet ermitteln



## Donar (23. Okt 2008)

Hallo ihr lieben,

es ist für meine kleine Anwendung die Anzahl der Elemente in meinem ResultSet ermitteln. Für ein Array ist das relativ einfach möglich durch: array.length(). Gibt es eine Möglichkeit für das ResultSet?

Mein rs ist wie folgt beschrieben:

```
...
String query = "select spalte from table";
ResultSet  rs = null;
rs = statement.executeQuery(query);
...
```


----------



## DocRandom (23. Okt 2008)

Hi!

Evtl. hilft Dir das weiter.
lg
DocRandom


----------



## Landei (24. Okt 2008)

Wofür genau brauchst du das? Wenn du "sowieso" Objekte aus dem Result-Set erzeugst, kannst du sie ja in einer Liste (zwischen-)speichern, und da kannst du am Ende mit size() die Größe abfragen.
Ansonsten eben DocRandoms Lösung mit SELECT count(*) FROM tabelle 
Du kannst auch die Anzahl der zurückgelieferten Sätze in den meisten DB begrenzen mit Select Top(100)... oder Select Top(10%) ...


----------



## Donar (24. Okt 2008)

Hallo ihr beiden,

es war nur eine allgemeine Frage, weil ich denke, dass ich diese Ausdrücke noch früh genug benötigen werde. 

Ich denke, dass alle Lösungen funktionieren. Dazu habe ich noch diese gefunden:


```
ResultSet rs = st.executeQuery(query);
rs.last();
int anzahlRs = rs.getRow();
```

Vielen Dank an euch


----------



## maki (24. Okt 2008)

>> es war nur eine allgemeine Frage, weil ich denke, dass ich diese Ausdrücke noch früh genug benötigen werde.


Hab das noch nie gebraucht, siehe Landeis Post


----------



## Lim_Dul (24. Okt 2008)

Donar hat gesagt.:
			
		

> Hallo ihr beiden,
> 
> es war nur eine allgemeine Frage, weil ich denke, dass ich diese Ausdrücke noch früh genug benötigen werde.
> 
> ...



Der Nachteil an der Lösung dürfte aber sein, dass die Datenbank tatsächlich alle Ergebniszeilen übertragen muss. Das kann je nach Menge schonmal länger dauern. Sprich, man wartet dann eventuell etwas auf das Ergebnis. Und wenn die Ergebniszeilen nicht alle braucht ist es Resourcen-Verschwendung.


----------



## robertpic71 (24. Okt 2008)

Lim_Dul hat gesagt.:
			
		

> Der Nachteil an der Lösung dürfte aber sein, dass die Datenbank tatsächlich alle Ergebniszeilen übertragen muss. Das kann je nach Menge schonmal länger dauern. Sprich, man wartet dann eventuell etwas auf das Ergebnis. Und wenn die Ergebniszeilen nicht alle braucht ist es Resourcen-Verschwendung.


Yep.

Ein Count(*) ist auf jeden Fall billiger was die Resourcen angeht!

Typischer Anwendungsfall ist das Implementieren einer Pagingfunktion. Ich sage einmal, bis 10.000 Zeilen ist das komplette Lesen auch noch kein Problem. Bei großen Datenbeständen kann das aber zum Problem werden. Wenn man dann unbedingt die Info 1 / von X Seiten anbieten will, bietet sich dafür der count(*) an. Die gewünschten Seiten werden dann mit LIMIT/OFFSET bzw. TOP bzw. row_number() - Syntax je nach Datenbank (oder Hibernate) geladen.

/Robert


----------



## DocRandom (24. Okt 2008)

>>> Ein Count(*) ist auf jeden Fall billiger was die Resourcen angeht!
...ä´hm steht auch in dem von mir gepostetem Link 

lg


----------



## Donar (24. Okt 2008)

Vielen lieben Dank an euch alle.


----------

