2012-04-11 12 views
5

Estoy usando una base de datos para almacenar la fecha y quiero que se devuelva una sola columna en función de qué identificación se proporciona en el lugar donde está.Compruebe si el cursor tiene resultados

public String getPmax(String serial) { 

    String[] columns = new String[]{KEY_SERIAL, KEY_PMAX};  
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "serial = " + serial, 
    null, null, null, null); 

    String result = "nothing found"; 

    if(c != null) { 

     int iPmax = c.getColumnIndex(KEY_PMAX); 

     c.moveToFirst(); 
     result = c.getString(iPmax); 

    } 

    return result; 

} 

Este código funciona si uso una serie que está en la base de datos pero me da una estrecha vigor cuando estoy usando una serie que no está en la base de datos!

que dice:

04-11 16:31:19.423: E/AndroidRuntime(21226): java.lang.RuntimeException: Unable to start activity ComponentInfo{nl.janjanus.solardetect/nl.janjanus.solardetect.DatabaseView}: android.database.sqlite.SQLiteException: no such column: g: , while compiling: SELECT serial, pmax FROM SolareCel WHERE serial = g 

Así que mi pregunta es: ¿Cómo verifico si hay resultado? o ¿necesito verificar si la serie dada es una serie que está en la base de datos?

Respuesta

36
if (!(mCursor.moveToFirst()) || mCursor.getCount() ==0){ 
    //cursor is empty 
} 
+0

El cursor no tiene filas, está vacío pero las pruebas anteriores todavía fallan, ¿por qué? ¿Hay algún otro cheque? Esto es realmente desconcertante. – Namratha

+2

Nota: esto tiene el efecto secundario de colocar el cursor en la primera posición. Puede causar un problema si pasa un objeto de cursor que se ha movido a una posición específica a otra función y luego se espera que aún esté en la posición :) –

2

Puede comprobar si el cursor tiene elementos:

boolean isEmpty = cursor.getCount() < 1; 

yo sepa, el cursor nunca vuelve nula cuando no hay una fila, que las condiciones solicitadas, simplemente devuelven un cursor vacío.

+1

Solo la excepción funcionó, el cheque no funciona para mí. ¿No hay otra manera de hacer esto? – Faas

4

Si observa detenidamente, el error es que el SQL está defectuoso. Lee el g como una columna. Tienes que encerrarlo en apóstrofes como 'g'.

En su caso, la línea de donde se obtiene el cursor debe ser:

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "serial = '" + serial + "'", 
    null, null, null, null); 

En cuanto a la comprobación de si el cursor no tiene resultados, mira la respuesta de Samir Mangroliya.

0
int x = cursor.getCount(); //this will return number of records in current cursor 
if (x == 0) { 
    // there are no records 
} else { 
    // do your stuff 
}