2012-04-11 12 views
5

Sto utilizzando un database per memorizzare la data e voglio che venga restituita una singola colonna in base alla quale viene indicato id nel claus dove.Verifica se il cursore ha risultati

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; 

} 

questo codice funziona se uso un serial che è nel database ma mi dà una forza vicina quando sto usando una serie che non è nel database!

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 

Quindi la mia domanda è: come faccio a controllare se c'è risultato? o devo controllare se il seriale dato è un seriale che si trova nel database?

risposta

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

Il cursore non ha righe, è vuoto ma i test precedenti non riescono ancora, perché? C'è qualche altro assegno? Questo è veramente sconcertante. – Namratha

+2

Nota: questo ha l'effetto collaterale di impostare il cursore sulla prima posizione. Può causare un problema se si passa un oggetto del cursore che è stato spostato in una posizione specifica a un'altra funzione e quindi si prevede di essere ancora nella posizione :) –

2

È possibile controllare se il cursore ha elementi:

boolean isEmpty = cursor.getCount() < 1; 

per quanto ne so, il cursore non restituisce il valore null quando non c'è fila che le condizioni richieste, solo restituiscono un cursore vuoto.

+1

Solo l'eccezione ha funzionato l'assegno non funziona per me. Non c'è altro modo per farlo? – Faas

4

Se si guarda da vicino, l'errore è che l'SQL è difettoso. Legge g come colonna. Devi racchiuderlo in apostrofi come in questo modo 'g'.

Nel tuo caso, la linea in cui si ottiene il cursore dovrebbe essere:

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

Per quanto riguarda la verifica se il cursore non ha risultati, guarda la risposta di 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 
} 
Problemi correlati