Uzyskaj wartość logiczną z bazy danych za pomocą systemu Android i oprogramowania SQLite


169

Jak mogę uzyskać wartość pola logicznego w bazie danych SQLite na Androidzie?

Zwykle używam getString(), getInt()itp., Aby uzyskać wartości moich pól, ale wydaje się, że nie ma getBoolean()metody.

Odpowiedzi:


351

To jest:

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

29
kursor.getInt (boolean_column_index)! = 0 jest bardziej standardowe C.
Buttink

2
@Buttink >0jest jednak krótszy w bajtach: P
Gurupad Mamadapur


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

Chociaż nie do końca odpowiada temu pytaniu (najbliższe jest Alex), jest to doskonała odpowiedź i użyję jej.
Budimir Grom

10

Większość odpowiedzi w tym miejscu może skutkować NumberFormatExceptions lub „operator jest niezdefiniowany dla typów null, int”, jeśli kolumna, w której zapisano int, może również zawierać wartość null. Przyzwoitym sposobem na zrobienie tego byłoby użycie

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

chociaż teraz jesteś ograniczony do przechowywania ciągów „prawda” i „fałsz” zamiast 0 lub 1.


5
To nie działa. Boolean.parseBoolean przyjmuje ciągi „prawda” lub „fałsz”. Jeśli zapamiętałeś wartość logiczną jako 0 lub 1, zawsze otrzymasz fałsz.
Gober,

Jeśli to, co mówi Gober, jest prawdą, to ta odpowiedź zasługuje na odrzucenie
Shervin Asgari,

Ach, on ma rację. Myślę, że przejrzystość wyniku przeważa nad koniecznością przechowywania strun.
Sojurn

1
@ShervinAsgari w drugiej odpowiedzi, jeśli zapiszesz swoją wartość logiczną jako prawda lub fałsz, zawsze będzie ona fałszywa. Więc to również powinno być odrzucone z twoją logiką.
Arda Kara

6

Implementacja znaleziona w Ormlite Cursor sprawdza również wartość Null, czego nie robi żadna z innych odpowiedzi.

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

6

Możesz także użyć

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

5
equals () nie zawiera
Shervin Asgari


3

booleantyp danych nie jest dostępny w Cursor.

otrzymasz wynik w postaci int, więc musisz przekonwertować tę intwartość na a boolean.

Możesz użyć

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

lub

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


0

Cóż, to bardzo proste:

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;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.