Получить логическое значение из базы данных с помощью Android и SQLite

169

Как я могу получить значение логического поля в SQLite данных на Android?

Я обычно использую getString(), getInt()и т. Д., Чтобы получить значения моих полей, но, похоже, нет getBoolean()метода.

Кевин Брэдшоу
источник

Ответы:

351

Это:

boolean value = cursor.getInt(boolean_column_index) > 0;
Алекс Орлов
источник
29
cursor.getInt (boolean_column_index)! = 0 является более стандартным C.
Buttink
2
@Buttink >0короче в байтах, хотя: P
Гурупад Мамадапур
23
boolean value = (cursor.getInt(boolean_column_index) == 1);
Элвис
источник
Даже если он не совсем соответствует этому вопросу (Алекс самый близкий), это отличный ответ, и я воспользуюсь этим.
Будимир Гром
10

Большинство ответов здесь могут привести к NumberFormatExceptions или «оператор не определен для типов null, int», если столбцу, в котором вы сохранили int, было разрешено также содержать значение null. Достойный способ сделать это будет использовать

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

хотя теперь вы ограничены хранением строк «истина» и «ложь», а не 0 или 1.

Sojurn
источник
5
Это не работает. Boolean.parseBoolean принимает строки «истина» или «ложь». Если вы сохранили логическое значение как 0 или 1, вы всегда получите false.
Гобер
Если то, что говорит Гобер, является правдой, то этот ответ заслуживает того, чтобы его проголосовали
Шервин Аскари
Ах, он прав. Я думаю, что ясность результата перевешивает необходимость хранить строки.
Сожурн
1
@ShervinAsgari в другом ответе, если вы сохраните логическое значение как истинное или ложное, оно всегда будет ложным. Так что это должно быть опущено тоже с вашей логикой.
Арда Кара
6

Реализация, найденная в Ormlite Cursor, также проверяет наличие Null, чего не делает ни один из других ответов.

   public boolean getBoolean(int columnIndex) {
        if (cursor.isNull(columnIndex) || cursor.getShort(columnIndex) == 0) {
            return false;
        } else {
            return true;
        }
    }
rtack
источник
6

Вы также можете использовать

boolean value =cursor.getString(boolean_column_index).equals("True");
zoeb
источник
5
equals () не содержит
Шервин Аскари
3

Другой вариант

boolean value = (cursor.getString(column_index)).equals("1");
Гохан Арик
источник
3

boolean тип данных недоступен в Cursor .

вы получите результат в int, так что вам нужно преобразовать это intзначение в boolean.

Вы можете использовать

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

или

boolean b = (cursor.getInt(boolean_column_index) != 0);
Ravi
источник
2

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

RedBullet
источник
0

Ну, это очень просто:

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
источник