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.