Holen Sie sich Boolesche Werte aus der Datenbank mit Android und SQLite

169

Wie kann ich den Wert eines booleschen Felds in einer SQLite- Datenbank unter Android ermitteln?

Normalerweise verwende ich getString(), getInt()usw. die Werte meiner Felder zu bekommen, aber es scheint nicht zu sein getBoolean()Verfahren.

Kevin Bradshaw
quelle

Antworten:

351

Es ist:

boolean value = cursor.getInt(boolean_column_index) > 0;
Alex Orlov
quelle
29
cursor.getInt (boolean_column_index)! = 0 ist mehr Standard C.
Buttink
2
@Buttink >0ist in Bytes allerdings kürzer: P
Gurupad Mamadapur
45

In SQLite gibt es keinen Bool-Datentyp. Verwenden Sie ein int, das Sie auf 0 oder 1 festlegen, um diesen Effekt zu erzielen. Siehe die Datentypreferenz unter SQLite 3.0 .

NG.
quelle
23
boolean value = (cursor.getInt(boolean_column_index) == 1);
Elvis
quelle
Auch wenn diese Frage nicht genau entspricht (Alex ist die am nächsten liegende), ist sie eine ausgezeichnete Antwort, und ich werde sie verwenden.
Budimir Grom
10

Die meisten Antworten hier können zu NumberFormatExceptions oder "Operator ist für die Typen null, int undefiniert" führen, wenn die Spalte, in der Sie das int gespeichert haben, auch null enthalten durfte. Der anständige Weg, dies zu tun, wäre zu verwenden

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

Sie können jetzt jedoch nur noch die Zeichenfolgen "true" und "false" anstelle von 0 oder 1 speichern.

Sojurn
quelle
5
Das funktioniert nicht. Boolean.parseBoolean akzeptiert "true" oder "false" Zeichenfolgen. Wenn Sie Ihren Booleschen Wert als 0 oder 1 gespeichert haben, erhalten Sie immer false.
Gober
Wenn das, was Gober sagt, wahr ist, dann verdient diese Antwort eine Abwertung
Shervin Asgari
Ah, er hat recht. Ich denke, die Klarheit des Ergebnisses überwiegt die Notwendigkeit, die Zeichenfolgen zu speichern.
Sojurn
1
@ShervinAsgari in der anderen Antwort Wenn Sie Ihren Booleschen Wert als wahr oder falsch speichern, wird er immer falsch. Es sollte also auch mit Ihrer Logik herabgestimmt werden.
Arda Kara
6

Eine bei Ormlite Cursor gefundene Implementierung sucht auch nach Null, was bei keiner der anderen Antworten der Fall ist .

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

Sie können auch verwenden

boolean value =cursor.getString(boolean_column_index).equals("True");
zoeb
quelle
5
equals () enthält nicht
Shervin Asgari
3

Andere Option

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

booleanDatentyp ist nicht verfügbar in Cursor.

Sie erhalten das Ergebnis in a int, daher müssen Sie diesen intWert in a konvertieren boolean.

Sie können entweder verwenden

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

oder

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

boolean b = (cursor.getInt (cursor.getColumnIndex ("item"))! = 0);

RedBullet
quelle
0

Nun, das ist sehr einfach:

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
quelle