2010-02-25 20 views

Respuesta

28

Inmediatamente después de su instrucción de ejecución, puede tener una instrucción if. Por ejemplo

ResultSet rs = statement.execute(); 
if (!rs.next()){ 
//ResultSet is empty 
} 
+11

sin embargo, si el conjunto de resultados no está vacío, ahora habrá movido el cursor, omitiendo la primera fila. – monopoint

+0

@monopoint exactamente – momomo

+1

@Paul Creo que debe actualizar su respuesta para que se complete restableciendo el cursor justo antes de la primera fila en el bloque else si no está vacío, es decir 'else {rs.beforeFirst(); } ' – sactiw

4

calcula el tamaño de la java.sql.ResultSet:

int size = 0; 
if (rs != null) { 
    rs.beforeFirst(); 
    rs.last(); 
    size = rs.getRow(); 
} 

(Source)

+0

Por lo que yo sé, es una mala idea ... en primer lugar, es necesario asegurarse de que el resultado puede moverse hacia atrás, en segundo lugar, se obtener un golpe de rendimiento al hacer eso. Es mucho más rápido usar solo un conjunto de resultados de solo avance, y usar un ciclo while (como ya lo han sugerido otros aquí) – user85116

+0

De acuerdo ... Elegí la respuesta aceptada, que responde a la pregunta mucho más directamente. – Dolph

+0

Dolph - AGRADABLE !!!!! –

10

Para ello, utilice rs.next():

while (rs.next()) 
{ 
    ... 
} 

Si el conjunto de resultados está vacía, el código dentro del bucle no se ejecutará.

8

Si utiliza rs.next() va a mover el cursor, lo que debe mover primero() por qué no se comprueba utilizando en primer lugar() directamente?

public void fetchData(ResultSet res, JTable table) throws SQLException{  
    ResultSetMetaData metaData = res.getMetaData(); 
    int fieldsCount = metaData.getColumnCount(); 
    for (int i = 1; i <= fieldsCount; i++) 
     ((DefaultTableModel) table.getModel()).addColumn(metaData.getColumnLabel(i)); 
    if (!res.first()) 
     JOptionPane.showMessageDialog(rootPane, "no data!"); 
    else 
     do { 
      Vector<Object> v = new Vector<Object>(); 
      for (int i = 1; i <= fieldsCount; i++)    
       v.addElement(res.getObject(i));   
      ((DefaultTableModel) table.getModel()).addRow(v); 
     } while (res.next()); 
     res.close(); 
} 
+0

Estoy de acuerdo. Agregué mi código a continuación (no pude incluir el código con el comentario). –

4
 
if (rs == null || !rs.first()) { 
    //empty 
} else { 
    //not empty 
} 

Tenga en cuenta que después de esta llamada al método, si el conjunto de resultados no está vacío, es al principio.

+0

De esta manera más seguro, pensé. – Kachwahed

+6

ResultSet nunca es nulo. – red1ynx

25

Definitivamente esto da buena solución,

ResultSet rs = stmt.execute("SQL QUERY"); 
// With the above statement you will not have a null ResultSet 'rs'. 
// In case, if any exception occurs then next line of code won't execute. 
// So, no problem if I won't check rs as null. 

if (rs.next()) { 
    do { 
     // Logic to retrieve the data from the resultset. 
     // eg: rs.getString("abc"); 
    } while(rs.next()); 
} else { 
    // No data 
} 
Cuestiones relacionadas