Supportnet Computer
Planet of Tech

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.

Antwort 2 von Filburt

Hi Volker!

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.


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:

 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

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.
// 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 :-)



Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: