2 votes

Impossible de récupérer les résultats d'une requête sqlite qui utilise count()

public Cursor legsWorkout(){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select count(*) from " + TABLE_W + " where w1="+ "Legs" + " or w2="
            + "Legs" + " or w3=" + "Legs",null);

    return res;
}

///other part

 Cursor res = myDB.bicepsWorkout();

            while (res.moveToFirst()){

                int totalCount = res.getInt(0);

                txtTest.setText(String.valueOf(totalCount));
            }

Maintenant le problème est que je ne peux pas récupérer les données parce que res.getString/int requiert un nom de colonne/index et techniquement, il n'y a pas de colonne lors de l'exécution de cette requête, seulement le résultat.

J'obtiens donc cette erreur : android.database.sqlite.SQLiteException: no such column: Biceps (code 1)

2voto

Ranjith Points 738

Un curseur expose les résultats d'une requête sur une SQLiteDatabase. Vous n'avez pas besoin du nom de la colonne pour obtenir le résultat, vous pouvez utiliser l'index pour obtenir le résultat de la requête. Dans votre cas, vous pouvez obtenir le nombre en utilisant le premier index.

   totalCount = res.getInt(0); //this will return the count value

0voto

MikeT Points 12446

Vous ne mettez pas les arguments de recherche de chaîne/texte entre guillemets simples, ils sont donc considérés comme des noms de colonnes.

c'est-à-dire que vous dites effectivement sélectionnez le nombre de lignes du tableau où la colonne w1 est égale à la colonne Jambes, ou la colonne w2 est égale à la colonne Jambes, ou la colonne w3 est égale à la colonne Jambes. . Cependant, il n'y a pas de colonne Jambes.

Essayez plutôt :-

Cursor res = db.rawQuery("select count(*) from " + TABLE_W + " where w1='"+ "Legs'" + " or w2="
        + "'Legs'" + " or w3=" + "'Legs'",null);

Dans ce cas, vous dites effectivement sélectionner le nombre de lignes du tableau où la colonne w1 est égale à la chaîne Legs ou la colonne w2 est égale à la chaîne Legs ou la colonne w3 est égale à la chaîne Legs

Plutôt que d'utiliser while(res.moveToFirst) { ..... } comme vous ne faites pas de boucle et qu'il n'y aura qu'une seule ligne retournée, il serait plus approprié d'utiliser if (res.moveToFirst) { .... }; .

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