Anzahl der Zeilen in einem Java-Resultset abrufen
Weiß jemand einen besseren Weg, um die Anzahl der Zeilen in einer Java-resultset zurückgegeben, die aus einer MySQL-Datenbank? Das resultset zurückgegeben wird nicht die Gesamtzahl der Zeilen aus der Datenbank gelesen, so dass ich glaube nicht, dass ich kann verwenden Sie die SQL - COUNT
Aggregatfunktion.
public static int getResultSetRowCount(ResultSet resultSet) {
int size = 0;
try {
resultSet.last();
size = resultSet.getRow();
resultSet.beforeFirst();
}
catch(Exception ex) {
return 0;
}
return size;
}
Kommentar zu dem Problem
Aufruf von resultSet.last() bewirken, dass die Ergebnismenge tatsächlich iterieren über alle Datensätze - es ist also deutlich ineffizienter. Auch wird Sie zwingen, alle Daten im Cache-Speicher, auch wenn Sie es nicht brauchen noch. Irgendeinen Grund, warum Sie sagte: "er resultset zurückgegeben wird nicht die Gesamtzahl der Zeilen aus der Datenbank gelesen werden" ?
@RonK: Warum glaubst du, wird es sein, Durchlaufen alle über? Ich konnte nichts finden, wie dies in docs.
@Ronk: Die Daten Lesen aus der Datenbank-Tabelle wird eine Teilmenge der in der Tabelle Daten nur, anstatt alle Daten in der Tabelle. Ich bin neugierig auf die 'Iteration über alle' wenn.
@Adeel Ansari: ich bin mir nicht 100% sicher, ich dekompiliert Oracle Ergebnismengen und fand heraus, dass in der Strömung der Berufung auf die 'letzten ()' - Methode der 'cacheAllRows ()' - Methode aufgerufen, und die Methode beginnt mit dem 'while(resultSet.next())'. Ich gehe davon aus, dass der MySQL-Treiber nicht haben etwas besseres zu tun.
@Mr. Morgan: Als einige der Antworten, die unten angegeben ist - wenn Sie einen SQL, der bekommt die Daten, die Sie haben können, das gleiche zu return COUNT() - ich sehe keinen Grund warum es nicht funktionieren kann.
InformationsquelleAutor der Frage Mr Morgan | 2010-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine bessere Antwort ist, zu vergessen, die Anzahl der Zeilen, bis Sie haben erfolgreich geladen das ResultSet in ein Objekt oder eine Sammlung. Sie können halten Sie die Anzahl von Zeilen mit einer von den beiden Optionen.
Ist es wichtig, in der Nähe von Ergebnismengen (und alle SQL-Ressourcen wie Connection und Statement) in dem engsten Gültigkeitsbereich der Methode möglich. Das bedeutet nicht übergeben ResultSet aus der Persistenz-Schicht. Besser, um die Anzahl der Zeilen mit einer Sammlung Größe () - Aufruf.
Aufhören zu denken, über Datenbanken und starten Sie das denken in Begriffen von "Objekten". Java ist eine Objekt-orientierte Sprache.
InformationsquelleAutor der Antwort duffymo
Führen Sie
unmittelbar nach der Ausführung der SELECT-Anweisung zu finden, die Zeilenanzahl.
InformationsquelleAutor der Antwort Lalith
Können Sie immer
SELECT COUNT()
mit der gleichen genauen Bedingungen, bevor Sie die eigentlicheSELECT
.InformationsquelleAutor der Antwort Adeel Ansari
Hier ist meine Lösung zu dieser Frage (da möchte ich vor allem die Anzahl der zurückgegebenen Datensätze zu bauen, ein array oder so ähnlich): eine Sammlung wie Vector<T> statt.
Einfach und sauber, keine? Kann für jede Größe des Datensatzes zurückgegeben (keine Notwendigkeit, um die Größe wissen, bevor die hand) und macht alle
List
Methoden zur Verfügung.Dieser diente mir gut für eine Zeit, aber wenn jemand sieht, ein Fehler in dieser, lassen Sie es mich bitte wissen. Wollen immer machen meiner Praxis besser, ya know.
InformationsquelleAutor der Antwort Kingsolmn
Wenn Sie mit Java 6 Sie können die JDBC4ResultSet Klasse mit der Methode getUpdateCount, gibt die Anzahl der betroffenen Zeilen von einem SQL-Anweisung auch für eine Select-Anweisung.
Siehe unten im Beispiel code:
Ich hoffe, dass diese Hilfe!
InformationsquelleAutor der Antwort Andre Farina
Sie können auch den folgenden Weg, um die Gesamtanzahl Datensätze in der Ergebnismenge:
zählen ist die Gesamtanzahl der zurückgegebenen Zeilen für die Ergebnismenge. 😉
InformationsquelleAutor der Antwort yi2ng2
Siehe unten im Beispiel code mit der Lösung von Lalith :
InformationsquelleAutor der Antwort Karima Rafes