6 votes

Vérifier si le curseur a des résultats

J'utilise une base de données pour stocker des dates et je veux qu'une seule colonne soit retournée en fonction de l'identifiant donné dans la clause where.

    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;  

}

Ce code fonctionne si j'utilise une série qui est dans la base de données mais il me donne une fermeture forcée quand j'utilise une série qui n'est pas dans la base de données !

il est dit :

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

Ma question est donc la suivante : comment puis-je vérifier s'il y a un résultat ? ou dois-je vérifier si le numéro de série donné est un numéro de série qui se trouve dans la base de données ?

39voto

Samir Mangroliya Points 21263
    if (!(mCursor.moveToFirst()) || mCursor.getCount() ==0){
     //cursor is empty
}

4voto

j0ntech Points 1128

Si vous regardez de près, l'erreur est que le SQL est défectueux. Il lit le g comme une colonne. Vous devez l'entourer d'apostrophes comme suit 'g' .

Dans votre cas, la ligne où vous obtenez le curseur devrait être :

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

Pour ce qui est de vérifier si le curseur n'a pas de résultat, consultez la réponse de Samir Mangroliya.

2voto

DGomez Points 1400

Vous pouvez vérifier si le curseur a des éléments :

boolean isEmpty = cursor.getCount() < 1;

A ma connaissance, le curseur ne renvoie jamais null lorsqu'il n'y a pas de ligne répondant aux conditions demandées, il renvoie simplement un curseur vide.

0voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X