Obtenir le nombre de lignes renvoyées par ResultSet dans Java

J’ai utilisé un ResultSet qui renvoie un certain nombre de lignes. Mon code est quelque chose comme ça:

 ResultSet res = getData(); if(!res.next()) { System.out.println("No Data Found"); } while(res.next()) { // code to display the data in the table. } 

Existe-t-il une méthode pour vérifier le nombre de lignes renvoyées par le ResultSet ? Ou dois-je écrire le mien?

Vous pouvez utiliser une boucle do ... while while à la place d’une boucle while afin que rs.next() soit appelée après l’exécution de la boucle, comme ceci:

 if (!rs.next()) { //if rs.next() returns false //then there are no rows. System.out.println("No records found"); } else { do { // Get data from the current row and use it } while (rs.next()); } 

Ou comptez les lignes vous-même comme vous les obtenez:

 int count = 0; while (rs.next()) { ++count; // Get data from the current row and use it } if (count == 0) { System.out.println("No records found"); } 

Tout d’abord, vous devez créer une Statement qui peut déplacer le curseur par commande:

 Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 

Ensuite, récupérez le ResultSet comme ci-dessous:

 ResultSet rs = stmt.executeQuery(...); 

Déplacer le curseur sur la dernière ligne et l’obtenir:

 if (rs.last()) { int rows = rs.getRow(); // Move to beginning rs.beforeFirst(); ... } 

Puis la variable lines contiendra le nombre de lignes renvoyées par sql

Une simple méthode getRowCount peut ressembler à ceci:

 private int getRowCount(ResultSet resultSet) { if (resultSet == null) { return 0; } try { resultSet.last(); return resultSet.getRow(); } catch (SQLException exp) { exp.printStackTrace(); } finally { try { resultSet.beforeFirst(); } catch (SQLException exp) { exp.printStackTrace(); } } return 0; } 

Juste pour être conscient que cette méthode aura besoin d’un resultSet sensible au défilement, donc lors de la création de la connexion, vous devez spécifier l’option de défilement. La valeur par défaut est FORWARD et l’utilisation de cette méthode provoquera une exception.

Une autre façon de différencier les lignes 0 ou certaines lignes d’un ResultSet:

 ResultSet res = getData(); if(!res.isBeforeFirst()){ //res.isBeforeFirst() is true if the cursor //is before the first row. If res contains //no rows, rs.isBeforeFirst() is false. System.out.println("0 rows"); } else{ while(res.next()){ // code to display the rows in the table. } } 

Si vous devez connaître le nombre de lignes auxquelles ResultSet est atsortingbué, voici une méthode pour l’obtenir:

 public int getRows(ResultSet res){ int totalRows = 0; try { res.last(); totalRows = res.getRow(); res.beforeFirst(); } catch(Exception ex) { return 0; } return totalRows ; } 

res.next() méthode res.next() emmène le pointeur sur la ligne suivante. et dans votre code, vous l’utilisez deux fois, d’abord pour la condition if (le curseur se déplace sur la première ligne) puis pour la condition while (le curseur se déplace sur la deuxième ligne).

Donc, lorsque vous accédez à vos résultats, cela commence à partir de la deuxième ligne. Donc, montre une ligne de moins dans les résultats.

vous pouvez essayer ceci:

 if(!res.next()){ System.out.println("No Data Found"); } else{ do{ //your code } while(res.next()); } 

Vous pouvez compter avec SQL et récupérer la réponse du jeu de résultats comme suit:

 Statment stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet ct = stmt.executeQuery("SELECT COUNT(*) FROM [table_name]"); if(ct.next()){ td.setTotalNumRows(ct.getInt(1)); } 

Ici, je compte tout, mais vous pouvez facilement modifier le SQL pour compter sur un critère.

  rs.last(); int rows = rs.getRow(); rs.beforeFirst(); 

Vous pouvez charger ResultSet dans un object TableModel, puis créer une table JTable qui utilise ce modèle de tableau, puis utiliser la méthode table.getRowCount (). Si vous souhaitez afficher le résultat de la requête, vous devez le faire quand même.

 ResultSet resultSet; resultSet = doQuery(something, somethingelse); KiransTableModel myTableModel = new KiransTableModel(resultSet); JTable table = new JTable(KiransTableModel); int rowCount; rowCount = table.getRowCount; 
 Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs=st.executeQuery("select * from emp where deptno=31"); rs.last(); System.out.println("NoOfRows: "+rs.getRow()); 

La première ligne de code indique que l’on peut se déplacer n’importe où dans le jeu de résultats (soit vers la première ligne ou la dernière ligne ou avant la première ligne sans avoir à parcourir ligne par ligne à partir de la première ligne). correspondant à la requête ici, je suppose (25 enregistrements), la troisième ligne de code déplace le curseur sur la dernière ligne et la dernière ligne de code obtient le numéro de ligne actuel, qui est 25 dans mon cas. S’il n’y a pas d’enregistrements, rs.last renvoie 0 et getrow déplace le curseur avant la première ligne, donc le retour d’une valeur négative indique l’absence d’enregistrements dans la firebase database

ceci ma solution

  ResultSet rs=Statement.executeQuery("query"); int rowCount=0; if (!rs.isBeforeFirst()) { System.out.println("No DATA" ); } else { while (rs.next()) { rowCount++; System.out.println("data1,data2,data3...etc.."); } System.out.println(rowCount); rowCount=0; rs.close(); Statement.close(); } 

Vous pouvez utiliser res.previous() comme suit:

 ResulerSet res = getDate(); if(!res.next()) { System.out.println("No Data Found."); } else { res.previous(); while(res.next()) { //code to display the data in the table. } }