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.

Kevin Bradshaw
źródło

Odpowiedzi:

351

To jest:

boolean value = cursor.getInt(boolean_column_index) > 0;
Alex Orlov
źródło
29
kursor.getInt (boolean_column_index)! = 0 jest bardziej standardowe C.
Buttink
2
@Buttink >0jest jednak krótszy w bajtach: P
Gurupad Mamadapur
45

W SQLite nie ma typu danych bool. Aby osiągnąć ten efekt, użyj wartości int, którą ustawiasz na 0 lub 1. Zobacz dokumentację dotyczącą typów danych w SQLite 3.0 .

NG.
źródło
23
boolean value = (cursor.getInt(boolean_column_index) == 1);
Elvis
źródło
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.

Sojurn
źródło
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;
        }
    }
rtack
źródło
6

Możesz także użyć

boolean value =cursor.getString(boolean_column_index).equals("True");
zoeb
źródło
5
equals () nie zawiera
Shervin Asgari
3

Inna opcja

boolean value = (cursor.getString(column_index)).equals("1");
Gokhan Arik
źródło
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);
Ravi
źródło
2

boolean b = (kursor.getInt (kursor.getColumnIndex ("pozycja"))! = 0);

RedBullet
źródło
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;
}
silexcorp
źródło