2011-11-28 18 views
48

Ho utilizzato uno ResultSet che restituisce un determinato numero di righe. Il mio codice è qualcosa di simile:Ottieni il numero di righe restituite da ResultSet in Java

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

Esiste un metodo per controllare il numero di righe restituite dalla ResultSet? O devo scrivere il mio?

+0

duplicato di: http://stackoverflow.com/questions/7545820/total-number-of-row-resultset-getrow-method –

risposta

47

Si potrebbe utilizzare un ciclo al posto di un ciclo whiledo ... while, in modo che rs.next() è chiamato dopo che il ciclo viene eseguito, in questo modo:

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()); 
} 

o contare le righe se stessi come li stai ricevendo:

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"); 
} 
+0

sto usando sopra il codice ma e visualizzo i record ma perde il primo record –

+0

indice di riga inizia da 1 in resultSet –

+0

@ FranciscI.B Negli esempi precedenti non viene utilizzato alcun indice di riga, quindi non importa se l'indice di riga inizia a 1 o qualsiasi altra cosa. – Jesper

4

res.next() il metodo porterà il puntatore alla riga successiva. e nel tuo codice lo stai usando due volte, prima per la condizione if (il cursore si sposta sulla prima riga) quindi per la condizione while (il cursore si sposta sulla seconda riga).

Così quando si accede ai risultati, inizia dalla seconda riga. Quindi mostra una riga in meno nei risultati.

si può provare questo:

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

In primo luogo, è necessario creare Statement che può essere spostare il cursore con il comando:

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

quindi recuperare la ResultSet come di seguito:

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

Sposta il cursore sull'ultima riga e ottieni:

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

Poi righe volontà variabile contiene il numero di righe restituite da SQL

22

Metodo GetRowCount semplice può apparire come questo:

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; 
} 

Giusto per essere consapevoli del fatto che questo metodo avrà bisogno di un scroll sensitive resultSet così durante la creazione della connessione devi specificare l'opzione scroll. L'impostazione predefinita è FORWARD e l'utilizzo di questo metodo genera un'eccezione.

+0

Il risultato Set.last(); riga restituisce il valore booleano, si prega di inserire se la dichiarazione. –

7

Un altro modo per distinguere tra 0 righe o alcune righe da una 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. 
    } 
} 

Se è necessario conoscere il numero di righe dato un ResultSet, ecco un metodo per farlo:

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

È possibile utilizzare res.previous() come segue:

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. 
    } 
} 
0

è possibile caricare il ResultSet in un TableModel, quindi creare una JTable che utilizza TableModel e quindi utilizzare il metodo table.getRowCount(). Se hai intenzione di visualizzare il risultato della query, devi farlo comunque.

ResultSet resultSet; 
resultSet = doQuery(something, somethingelse); 
KiransTableModel myTableModel = new KiransTableModel(resultSet); 
JTable table = new JTable(KiransTableModel); 
int rowCount; 
rowCount = table.getRowCount; 
2

Si potrebbe contare con SQL e recuperare la risposta del gruppo di risultati in questo modo:

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)); 
      } 

Qui sto contando tutto, ma si può facilmente modificare il codice SQL per contare basa su un criterio.

0
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()); 

prima riga di codice dice che possiamo andare in qualsiasi parte del gruppo di risultati (o alla prima riga o ultima riga o prima della prima fila, senza la necessità di attraversare riga per riga partendo dalla prima fila, che è giunto il momento di prendere). la seconda riga di codice recupera i record corrispondenti alla query che sto assumendo (25 record), la terza riga del codice sposta il cursore sull'ultima riga e la riga finale del codice ottiene il numero di riga corrente che è 25 nel mio caso. se non ci sono record, rs.last restituisce 0 e getRow sposta cursore prima prima riga quindi restituendo valore negativo indica record nel db

+0

puoi elaborare una spiegazione su come ciò potrebbe essere d'aiuto? – kommradHomer

+0

@kommradHomer la prima riga di codice dice che possiamo spostarci ovunque nel set di risultati (sia per la prima riga o l'ultima riga o prima della prima riga senza la necessità di attraversare riga per riga a partire dalla prima riga che richiede tempo) .seconda riga di codice recupera i record corrispondenti alla query che sto assumendo (25 record), la terza riga del codice sposta il cursore sull'ultima riga e la riga finale del codice ottiene il numero di riga corrente che è 25 nel mio caso. se non ci sono record, rs.last restituisce 0 e getrow sposta il cursore su prima della prima riga, quindi il valore negativo di ritorno indica nessun record in db. –

1

questa mia soluzione

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(); 
     } 
0
 rs.last(); 
     int rows = rs.getRow(); 
     rs.beforeFirst(); 
Problemi correlati