Obtenir le booléen de la base de données en utilisant Android et SQLite

169

Comment puis-je obtenir la valeur d'un champ booléen dans une base de données SQLite sur Android?

Je l'habitude d' utiliser getString(), getInt()etc. pour obtenir les valeurs de mes champs, mais il ne semble pas être une getBoolean()méthode.

Kevin Bradshaw
la source

Réponses:

351

C'est:

boolean value = cursor.getInt(boolean_column_index) > 0;
Alex Orlov
la source
29
curseur.getInt (boolean_column_index)! = 0 est plus standard C.
Buttink
2
@Buttink >0est plus court en octets cependant: P
Gurupad Mamadapur
23
boolean value = (cursor.getInt(boolean_column_index) == 1);
Elvis
la source
Même si elle ne correspond pas exactement à cette question (celle d'Alex est la plus proche), c'est une excellente réponse, et je vais l'utiliser.
Budimir Grom
10

La plupart des réponses ici peuvent résulter en NumberFormatExceptions ou "l'opérateur n'est pas défini pour les types null, int" si la colonne dans laquelle vous avez stocké l'int était également autorisée à contenir null. La façon décente de le faire serait d'utiliser

Boolean.parseBoolean(cursor.getString(booleanColumnIndex));`

bien que vous soyez maintenant limité à stocker les chaînes "vrai" et "faux" plutôt que 0 ou 1.

Sojurn
la source
5
Cela ne fonctionne pas. Boolean.parseBoolean prend des chaînes "true" ou "false". Si vous avez stocké votre valeur booléenne sur 0 ou 1, vous obtiendrez toujours false.
Gober
Si ce que dit Gober est vrai, alors cette réponse mérite d'être critiquée
Shervin Asgari
Ah, il a raison. Je pense que la clarté du résultat l'emporte sur le fait de devoir stocker les chaînes.
Sojurn
1
@ShervinAsgari dans l'autre réponse, si vous stockez votre booléen comme vrai ou faux, il deviendra toujours faux. Donc, il devrait également être critiqué avec votre logique.
Arda Kara du
6

Une implémentation trouvée sur Ormlite Cursor vérifie également Null, ce qu'aucune des autres réponses ne fait.

   public boolean getBoolean(int columnIndex) {
        if (cursor.isNull(columnIndex) || cursor.getShort(columnIndex) == 0) {
            return false;
        } else {
            return true;
        }
    }
rtack
la source
6

Vous pouvez aussi utiliser

boolean value =cursor.getString(boolean_column_index).equals("True");
zoeb
la source
5
equals () not contains
Shervin Asgari
3

Une autre option

boolean value = (cursor.getString(column_index)).equals("1");
Gokhan Arik
la source
3

boolean le type de données n'est pas disponible dans Cursor .

vous obtiendrez le résultat dans un int, vous devez donc convertir cette intvaleur en a boolean.

Vous pouvez soit utiliser

boolean b = cursor.getInt(boolean_column_index) > 0;

ou

boolean b = (cursor.getInt(boolean_column_index) != 0);
Ravi
la source
2

booléen b = (cursor.getInt (cursor.getColumnIndex ("item"))! = 0);

RedBullet
la source
0

Eh bien, c'est très simple:

public boolean getBooleanState(SQLiteDatabase db){
    boolean result = false;
    try{
        String QUERY = "SELECT " + BOOLEAN_DATA + " FROM " + TABLE_NAME + " WHERE " + ID + " = 1";
        Cursor cursor = db.rawQuery(QUERY, null);
        if (cursor.moveToFirst()){
            if(cursor.getString(0).equalsIgnoreCase("1")){
                result = true;
            }
        }
        c.close();
    }catch(Exception ee){
        Log.e(TAG, "err getBooleanState: " + TABLE_NAME );
    }
    return result;
}
silexcorp
la source