使用Android和SQLite从数据库获取布尔值


169

如何在Android上的SQLite数据库中获取布尔字段的值?

我通常使用getString()getInt()等等来获取字段的值,但是似乎没有一种getBoolean()方法。

Answers:




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

即使不完全与此问题相对应(Alex是最接近的问题),它也是一个很好的答案,我将使用它。
Budimir Grom 2014年

10

如果您将存储int的列也保留为null,则此处的大多数答案都可能导致NumberFormatExceptions或“对于类型为null,int的操作符未定义”。做到这一点的体面方法是使用

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

尽管您现在只能存储字符串“ true”和“ false”,而不是0或1。


5
这是行不通的。Boolean.parseBoolean接受“ true”或“ false”字符串。如果您将布尔值存储为0或1,则总会得到false。
Gober

如果戈伯所说的是真的,那么这个答案就应该被
否决了

啊,他是对的。我认为结果的清晰度超过必须存储字符串。
Sojurn

1
@ShervinAsgari在另一个答案中,如果将布尔值存储为true或false,它将始终为false。因此,根据您的逻辑也应予以否决。
阿达·卡拉

6

Ormlite游标中找到的实现也检查Null,其他答案中没有。

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


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);

2

布尔b =(cursor.getInt(cursor.getColumnIndex(“ item”))!= 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;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.