Supportnet / Forum / Anwendungen(Java,C++...)
JAVA: ResultSet - Frage...
Frage
Hi.
Wie kann ich herrausbekommen, wieviele Zeilen ein ResultSet hat, wenn ich es zurückbekomme?? Ich hab das mit ner Zählschleife versucht, das ist aber nicht die feine Art...
Gibts dafür eine Methode um die Anzahl zu bekommen??
Danke schonmal.
MfG Filburt
Antwort 1 von draack
Hi!
Mit Methode "getMetaData()" von "ResultSet" erhälst Du "ResultSetMetaData" das hat die Methode "getColumnCount()" - die liefert dann die Anzahl der Zeilen im "ResultSet".
Viel Erfolg!
Volker.
Mit Methode "getMetaData()" von "ResultSet" erhälst Du "ResultSetMetaData" das hat die Methode "getColumnCount()" - die liefert dann die Anzahl der Zeilen im "ResultSet".
Viel Erfolg!
Volker.
Antwort 2 von Filburt
Hi Volker!
Columns sind aber Spalten... Die Methode liefert die Anzahl der Spalten im ResultSet.
Trotzdem danke.
Columns sind aber Spalten... Die Methode liefert die Anzahl der Spalten im ResultSet.
Trotzdem danke.
Antwort 3 von semi
ResultSet.getRow() liefert die aktuelle Zeilennummer (1 bis n)
Idee: Zum Ende von ResultSet bewegen und Position holen.
Wenn Du die Anzahl der Zeilen nur einmal vor dem Lesen ermitteln möchtest, dann geht es noch kürzer:
Das ganze setzt aber voraus, dass eine absolute Positionierung in BEIDE Richtungen möglich ist.
(resultSet.getType() != ResultSet.TYPE_FORWARD_ONLY)
Du wirst es früh genug merken, wenn die obige Bedingung nicht erfüllt ist :-)
Gruss,
Michael
Idee: Zum Ende von ResultSet bewegen und Position holen.
public int getRowCount(ResultSet resultSet) throws SQLException {
int oldPosition = resultSet.getRow();
if(!resultSet.last())
return 0;
int rowCount = resultSet.getRow();
resultSet.absolute(oldPosition);
return rowCount;
}
Wenn Du die Anzahl der Zeilen nur einmal vor dem Lesen ermitteln möchtest, dann geht es noch kürzer:
ResultSet resultSet = statement.exec...
resultSet.last();
int rowCount = resultSet.getRow();
resultSet.first();
Das ganze setzt aber voraus, dass eine absolute Positionierung in BEIDE Richtungen möglich ist.
(resultSet.getType() != ResultSet.TYPE_FORWARD_ONLY)
Du wirst es früh genug merken, wenn die obige Bedingung nicht erfüllt ist :-)
Gruss,
Michael
Antwort 4 von Filburt
Hi Michael!
Hast du deine erste Methode mal getestet? Bei mir meldet sich der compiler:
daten ist das resultset.
Ich vermute stark, bei dem Resultset kann man nicht in beide Richtungen positionieren, auch das untere Beispiel brachte ne Exception. Heute hab ich allerdings keine Lust mehr zur Fehlersuche... werd mir das morgen nochmal genauer ansehen.
Ist schon komisch das Sun so eine Methode nicht mit eingebaut hat...
Gute Nacht. Filburt
Hast du deine erste Methode mal getestet? Bei mir meldet sich der compiler:
non-static method getRowCount(java.sql.ResultSet) cannot be re
ferenced from a static context
getRowCount(daten);
daten ist das resultset.
Ich vermute stark, bei dem Resultset kann man nicht in beide Richtungen positionieren, auch das untere Beispiel brachte ne Exception. Heute hab ich allerdings keine Lust mehr zur Fehlersuche... werd mir das morgen nochmal genauer ansehen.
Ist schon komisch das Sun so eine Methode nicht mit eingebaut hat...
Gute Nacht. Filburt
Antwort 5 von semi
Du rufst die Methode getRowCount (siehe Antwort 3) von main oder von einer statischen Methode aus auf.
Ändere es vielleicht in
Das Prüfen, ob Du den Cursor hin und her bewegen kannst, geht auch ganz einfach (siehe Antwort 3)
Ausgangslage: Du hast ein Resultset-Objekt, nennen wir es mal rs
Mit folgendem Code kannst Du es prüfen:
Alternativ kannst Du an Deine SQL-Abfragen count(*) anhängen:
Beispiel:
Gruss,
Michael
Ändere es vielleicht in
public static int getRowCount(ResultSet resultSet) throws SQLException {
...
}
oder erstelle zuerst ein Instanz der Klasse, wo Du es drin hast.Das Prüfen, ob Du den Cursor hin und her bewegen kannst, geht auch ganz einfach (siehe Antwort 3)
Ausgangslage: Du hast ein Resultset-Objekt, nennen wir es mal rs
Mit folgendem Code kannst Du es prüfen:
if(rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {
// absolute Positionierung möglich
}
else {
// geht nicht. Nur Vorwärtslesen erlaubt/möglich
}
Alternativ kannst Du an Deine SQL-Abfragen count(*) anhängen:
Beispiel:
SELECT *, cout(*)
FROM Tabelle
... usw.
Gruss,
Michael
Antwort 6 von draack
@Filburt
Zu meiner 1.ten Antwort:
Aua! Klarer Fall von temporärer Blindheit.
Das sollte funktionieren. Leider kann ich es hier nicht ausprobieren.
Ciao!
Volker.
Zu meiner 1.ten Antwort:
Aua! Klarer Fall von temporärer Blindheit.
// Cursor auf die letzte Zeile des ResultSet setzen
daten.last();
// dann Cursorposition abfragen
rowCount = daten.getRow();
Das sollte funktionieren. Leider kann ich es hier nicht ausprobieren.
Ciao!
Volker.
Antwort 7 von semi
Bemerkung zu Antwort 5: Vergiss das mit dem count(*) wieder. Soooo geht es nicht :-)