JDBC Resultset

Hallo Zusammen,

ich habe eine ganze kurze Frage:

Eine JDBC-Query liefert ein ResultSet zurück, das mir ermöglicht über die Ergebnismenge zu iterrieren: Sind in dem ResultSet nun alle Daten enthalten, oder wird beim iterrieren immer wieder die Datenbank angefragt?

Viele Grüße
Mic

Hallo,

Sind in dem ResultSet nun alle Daten enthalten, oder wird beim iterrieren immer wieder die Datenbank angefragt?

das hängt von der Implementierung des ResultSets ab. Typisch ist aber, dass nicht das ganze Ergebnis der Anfrage im ResultSet materialisiert wird, sondern dass es schritthaltend von der DB berechnet wird, während man über das ResultSet iteriert.

Viele Grüße,

Andreas

Typisch
ist aber, dass nicht das ganze Ergebnis der Anfrage im
ResultSet materialisiert wird, sondern dass es schritthaltend
von der DB berechnet wird, während man über das ResultSet
iteriert.

Also wenn ich das nächste Element auf dem Resultset abfrage wird dieses von der Datenbank geladen. Und das würde auch heissen(wenn ich das Statement schreibar mache und) einen Wert in dem ResultSet ändere das ebenfalls in die Datenbank übertragen wird? (ohne explizite Update-Commando`?)

So weit mir bekannt ist werden Large Objects (z.B. BLOB) erst beim Aufruf durch eine neue Abfrage geladen (Lazy Load). Im ResultSet befindet sich nur ein Zeiger auf die Daten und wird dieser Aufgerufen, wird die Abfrage abgesetzt.

Andere Datentypen werden sofort geladen.

Das ist die Regel, aber es muss so nicht sein!!!
Denn JDBC ist nur eine API, wie die konkrete Implementierung ist, da muss du den Hersteller des Treibers fragen. Ich habe gehört das es bei einigen Treiber Version zum Beispiel so ist, das bei sehr großen ResultSet die Daten nur zu einen Teil geladen werden und der Rest wird erst bei „Bedarf“ geholt.

Hi,

einen Wert
in dem ResultSet ändere das ebenfalls in die Datenbank
übertragen wird? (ohne explizite Update-Commando`?)

ja, es gibt solche „updatable result sets“. In der Doku gibt es dazu auch Beispiele: http://java.sun.com/javase/6/docs/api/java/sql/Resul…

Andreas

Wie gesagt es ist abhängig von der Implementierung des Treibers. Du muss am besten den Hersteller bzw. die Comunity des Herstellers fragen.

Wenn du es genau wissen möchtest, jede Datenbank erlaubt das logging. Einfach anschalten und mal sehen was wirklich zur Datenbank geschickt wird.