Angenommen, ein ResultSet rs
mit n
-Objekt zu haben.
Dieser Code:
%Vor%ist diesem Code algorithmisch gleich (d. h. beide ergaben das gleiche Ergebnis):
%Vor% Aber sind diese Äquivalenz mit den Begriffen der Durchgängigkeit identisch? Ist der erste schneller? Oder, für ein gegebenes i
, ist rs.next () nur ein Wrapper für rs.absolute(i+1)
?
Mit freundlichen Grüßen MC
rs.next
erfordert eine einfachere Art von Datenbankcursor ( FORWARD_ONLY
) als rs.absolute
. In den meisten Fällen verschlechtern Sie die Leistung / Ressourceneffizienz mit rs.absolute
. In bestimmten Fällen, in denen es sowieso keine Optimierung für einen FORWARD_ONLY
Cursor gibt, erhalten Sie möglicherweise die gleiche Leistung.
Einige Treiber können absolute
Aufrufe sogar mit FORWARD_ONLY
zulassen, was bestätigt, dass der angeforderte Datensatz der nächste ist, aber wieder andere können eine Ausnahme auslösen.
Das vorherige rs.next()
könnte schneller sein, obwohl es von der zugrundeliegenden Implementierung abhängt und in Wirklichkeit könnten Sie aufgrund der internen Optimierungen dieselbe Leistung erzielen.
Der Fahrer berücksichtigt die aktuelle Position möglicherweise nicht, wenn er rs.absolute()
ausführt, so dass er leicht etwas Overhead hat, während er in rs.next()
nur vorwärts geht.
Wenn Sie also alle Ergebnisse durchlaufen müssen, verwenden Sie einfach rs.next()
. Wenn Sie zu einem bestimmten Ergebnis springen müssen, verwenden Sie rs.absolute()
.
Denken Sie daran, dass die Ergebnismenge tatsächlich oft remote von der Datenbank gehandhabt wird (es sei denn, es handelt sich um CachedResultSet
), daher kann das Hin- und Hergehen mehr Overhead verursachen als Sie denken.
Tags und Links java benchmarking jdbc