92 votes

Comment obtenir le nombre de lignes à l'aide de ResultSet en Java ?

J'essaie de créer une méthode simple qui reçoit un ResultSet en tant que paramètre et renvoie un int qui contient le nombre de lignes du ResultSet. Est-ce une façon valable de faire cela ou pas tellement?

 int size = 0;
    try {
        while(rs.next()){
            size++;
        }
    }
    catch(Exception ex) {
        System.out.println("------------------Tablerize.getRowCount-----------------");
        System.out.println("Cannot get resultSet row count: " + ex);
        System.out.println("--------------------------------------------------------");
    }

J'ai essayé ceci :

 int size = 0;
try {
    resultSet.last();
    size = resultSet.getRow();
    resultSet.beforeFirst();
}
catch(Exception ex) {
    return 0;
}
return size;

Mais j'ai une erreur disant com.microsoft.sqlserver.jdbc.SQLServerException: The requested operation is not supported on forward only result sets.

Merci d'avance pour les indications !

48voto

Java Man Points 983
Statement s = cd.createStatement();
ResultSet r = s.executeQuery("SELECT COUNT(*) AS rowcount FROM FieldMaster");
r.next();
int count = r.getInt("rowcount");
r.close();
System.out.println("MyTable has " + count + " row(s).");

Parfois, JDBC ne prend pas en charge la méthode suivante donne une erreur comme `TYPE_FORWARD_ONLY' utilisez cette solution

Sqlite ne prend pas en charge JDBC.

 resultSet.last();
size = resultSet.getRow();
resultSet.beforeFirst();

Alors à ce moment-là, utilisez cette solution.

Merci..

40voto

Fathah Rehman P Points 2509

votre code de création de déclaration SQL peut être comme

 statement = connection.createStatement();

Pour résoudre l'exception "com.microsoft.sqlserver.jdbc.SQLServerException : l'opération demandée n'est pas prise en charge sur les ensembles de résultats en avant uniquement", modifiez le code ci-dessus avec

 statement = connection.createStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE, 
    ResultSet.CONCUR_READ_ONLY);

Après le changement ci-dessus, vous pouvez utiliser

 int size = 0;
try {
    resultSet.last();
    size = resultSet.getRow();
    resultSet.beforeFirst();
}
catch(Exception ex) {
    return 0;
}
return size;

pour obtenir le nombre de lignes

8voto

The01Guy Points 11

Je viens de créer une méthode getter.

 public int getNumberRows(){
    try{
       statement = connection.creatStatement();
       resultset = statement.executeQuery("your query here");
       if(resultset.last()){
          return resultset.getRow();
       } else {
           return 0; //just cus I like to always do some kinda else statement.
       }
    } catch (Exception e){
       System.out.println("Error getting row count");
       e.printStackTrace();
    }
    return 0;
}

7voto

Suganthan Points 768

Faites plutôt une requête SELECT COUNT(*) FROM ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X