Отримайте булеву базу даних за допомогою Android та SQLite


169

Як я можу отримати значення булевого поля в базі даних SQLite на Android?

Зазвичай я використовую getString()і getInt()т.д. для отримання значень моїх полів, але, схоже, немає getBoolean()методу.

Відповіді:




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

Незважаючи на те, що не зовсім відповідає цьому питанню (Алекс є найближчим), це відмінна відповідь, і я використаю це.
Будимир Гром

10

Більшість відповідей тут може призвести до NumberFormatExceptions або "оператор не визначений для типів null, int", якщо стовпець, в якому ви зберігали int, також міг містити null. Гідним способом цього було б скористатися

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

хоча ви обмежені для зберігання рядків "true" та "false", а не 0 або 1.


5
Це не працює. Boolean.parseBoolean приймає рядки "true" або "false". Якщо ви зберігаєте булеві значення 0 або 1, ви завжди будете помилковими.
Гобер

Якщо те, що говорить Гобер, є істинним, то ця відповідь заслуговує на те, щоби її зняти
Шервін Асгарі

Ах, він правий. Я думаю, що чіткість результату перевищує необхідність зберігання рядків.
Соджурн

1
@ShervinAsgari в іншій відповіді, якщо ви зберігаєте булевий як істинний або хибний, він завжди отримуватиме помилкове значення. Тож це також має бути прихильне до вашої логіки.
Арда Кара

6

Реалізація, знайдена в Ormlite Cursor, також перевіряє наявність Null, що не відповідає жоден з інших відповідей.

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



3

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

ви отримаєте результат у int, тому вам потрібно перетворити це intзначення у boolean.

Можна або використовувати

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

або

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


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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.