# Abfrage stoppen und fortsetzen



## LennysProject (7. Mrz 2005)

Hallo Leute 
Ich habe folgendes Problem:
Ich möchte eine Datenbank abfrage an eine Oracle DB machen. Ich benutze Eclipse.
Nun möchte ich aber erstmal die ersten 10 Ergebnisse haben und die Abfrage dann stoppen, bis die nächsten 10 Ergebnisse gefordert werden. Ich hoffe euch fällt was ein um dieses Problem zu lösen. Ich habe was zu setfetchsize gelesen. Dort wurde gesagt, das fetchsize angibt wieviel Ergebnisse pro Paket geliefert werden. nur wie kann ich eine Abfrage stoppen und wieder fortsetzen? :bahnhof:


----------



## DP (7. Mrz 2005)

```
SELECT * FROM TABELLE WHERE ROWNUM BETWEEN 1 AND 10
```


----------



## LennysProject (7. Mrz 2005)

Ich möchte nicht die ersten 10 Datensätze aus der Tabelle haben sondern eine beliebíege Anfrage an die DB stellen und erstmal nur die ersten 10 Ergebnisse der Abfrage zurückgeliefert bekommen und wenn ich noch mehr Ergebnisse will sollen die nächsten 10 gesendet werden


----------



## Bleiglanz (7. Mrz 2005)

was heisst wollen???

bei warten auf benutzereingabe: das paging programmatisch erledigen (d.h. pos merken und between x and y von Hand erstellen und ein neues Resultset holen)

wenns durchläuft (und von irgendeiner Programmlogik abhängt): einfach nach dem 10. rs.next() anhalten - prüfen - und evtl. ein break;  absetzen


----------



## LennysProject (7. Mrz 2005)

das mit programmatisch hab ich nicht verstanden. Aber hört sich leider nicht nach einer Lösung an.
Wenn ein Benutzer eine Abfrage startet soll die Anfrage an die Datenbank gestellt werden. Da die Datenbank mehrere Millionen Einträge besitzt, soll etwa eine Select * From Irgendwas nicht alle Ergebnisse in ein ResultSet übergeben, da sonst das Netzwerk in die Knie gehen würde. Aus diesem Grund sollen nur die ersten 10 Ergebnisse in das ResultSet geschrieben werden und beim Klient angezeigt werden. Wenn der Klient nun weitere 10 Ergebnisse haben möchte sollen die nächsten 10 in dieses Resultset über das Netzwerk übertragen werden. Wie ich schon erwähnt hatte, bietet fetchsize irgendeine Möglichkeit ich weiß nur nicht wie.


----------



## Bleiglanz (7. Mrz 2005)

vergiss es, du sollst eine Verbindung nicht ewig offen lassen!!!

Bis der Benutzer da am Bildschirm weiterblättert und mit dem Nasenbohren fertig ist willst du die ganze Zeit eine  DB-Query mit mehreren Millionen Zeilen "offen" lassen? Sehr fragwürdig!!

Oder habt ihr unbegrenzt Geld, Ressourcen, Rechenleistung etc.?

gib ihm 10, mach rs.close, ggf. auch conn.close und merk dir die "nächste Pos"

wenn er die nächsten 10 will, dann mach ein NEUES Select - beginnend bei der aktuellen Pos -, hol dir die nächsten 10 und mach rs.close und ggf. auch conn.close

usw. usw.


ggf. kannst du auch immer 10 mehr holen - auf Vorrat -;  dann läuft das Blättern "SOFORT" ab (und du könntest im Hintergrund die nächsten holen...)


----------



## AlArenal (7. Mrz 2005)

Können deine Benutzer eigene Queries an die DB richten? Dann solltest du diese parsen. Prüf bei SELECTs ob ein LIMIT angegebnn ist und wie groß dieses ist; ggf. füge selbst eins an oder ändere ein vorhandenes intern ab.


----------

