wake-up-neo.net

Anzahl der Zeilen in einem Java-Resultset abrufen

Kennt jemand einen besseren Weg, um die Anzahl der Zeilen in einer Java-Ergebnismenge aus einer MySQL-Datenbank zu erhalten? Das zurückgegebene Resultset ist nicht die Gesamtzahl der aus der Datenbank gelesenen Zeilen. Ich glaube nicht, dass ich die COUNT-Aggregatfunktion von SQL verwenden kann.

public static int getResultSetRowCount(ResultSet resultSet) {
    int size = 0;
    try {
        resultSet.last();
        size = resultSet.getRow();
        resultSet.beforeFirst();
    }
    catch(Exception ex) {
        return 0;
    }
    return size;
}
24
Mr Morgan

Eine bessere Antwort ist, die Anzahl der Zeilen zu vergessen, bis Sie das ResultSet erfolgreich in ein Objekt oder eine Sammlung geladen haben. Sie können die Anzahl der Zeilen mit einer dieser Optionen beibehalten. 

Es ist wichtig, ResultSets (und alle SQL-Ressourcen wie Connection und Statement) im engsten möglichen Methodenbereich zu schließen. Das bedeutet, ResultSet nicht aus der Persistenzschicht zu übergeben. Besser, die Anzahl der Zeilen mit einem Aufruf von Collection size () abzurufen.

Hören Sie auf, über Datenbanken nachzudenken, und fangen Sie an, über Objekte nachzudenken. Java ist eine objektorientierte Sprache.

20
duffymo

Sie können ausführen

SELECT FOUND_ROWS()

unmittelbar nach der Ausführung Ihrer SELECT-Anweisung, um die Zeilenanzahl zu ermitteln.

9
Lalith

Sie können SELECT COUNT() immer mit den gleichen exakten Bedingungen verwenden, bevor Sie die tatsächliche SELECT vornehmen.

2
Adeel Ansari

Hier ist meine Lösung zu dieser Frage (da ich meistens möchte, dass die Anzahl der zurückgegebenen Datensätze ein Array oder etwas Ähnliches erstellt): Verwenden Sie stattdessen eine Sammlung wie Vector <T> .

public Vector<T> getRecords(){
   Vector<T> records = new Vector<T>();
   init_conn_and_stmt_and_rs();

   try {
      rs = stmt.executeQuery("SELECT * FROM `table` WHERE `something` = 0");
      while(rs.next()){
         // Load the Vector here.
      }
   } catch (SQLException e) {
      e.printStackTrace();
   }finally{
      close_rs_and_stmt_and_conn();
   }
   return records;
}

Sauber und einfach, nein? Funktioniert für alle zurückgegebenen Datensatzgrößen (keine Notwendigkeit, die Größe vorab zu kennen) und macht alle List-Methoden verfügbar. 

Das hat mir schon eine Weile gedient, aber wenn jemand einen Fehler darin sieht, lass es mich wissen. Ich möchte immer meine Übungen verbessern, weißt du.

2
Kingsolmn

Sie können auch die folgende Methode verwenden, um die Gesamtdatensätze im resultSet abzurufen:

statement = connect.createStatement();
resultSet = statement.executeQuery(sqlStatement);
resultSet.last();
int count = resultSet.getRow();
System.out.println(count);

Anzahl ist die Summe der zurückgegebenen Zeilen für Ihre Ergebnismenge. ;)

1
yi2ng2

Wenn Sie Java 6 verwenden, können Sie die JDBC4ResultSet-Klasse verwenden, die über die getUpdateCount-Methode verfügt, die die Anzahl der von einer SQL-Anweisung betroffenen Zeilen auch für eine Select-Anweisung zurückgibt.

Siehe den Beispielcode:

PreparedStatement ps = con.prepareStatement("select * from any_table ...");
JDBC4ResultSet rs = (JDBC4ResultSet)ps.executeQuery();
int rowNumber = rs.getUpdateCount();

Ich hoffe das hilft!

1
Andre Farina

Siehe den Beispielcode mit der Lösung von Lalith:

public static int getResultSetRowCount(connection) {
    int size = 0; 
    statement = connection.createStatement(); 
    try {
        resultSet = statement.executeQuery("SELECT FOUND_ROWS()")
        resultSet.next()
        size = resultSet.getInt(1)
    }
    catch(Exception ex) {
        return 0;
    }
    statement.close();
    return size;
}
0
Karima Rafes