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.

Antworten:


351

Es ist:

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

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 .


23
boolean value = (cursor.getInt(boolean_column_index) == 1);

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.


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;
        }
    }

6

Sie können auch verwenden

boolean value =cursor.getString(boolean_column_index).equals("True");

5
equals () enthält nicht
Shervin Asgari

3

Andere Option

boolean value = (cursor.getString(column_index)).equals("1");

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);

2

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


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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.