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

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

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

88907 次浏览

SQLite 中没有 bool 数据类型。使用修正为0或1的 int 来实现这种效果。参见 SQLite 3.0上的 数据类型引用

它是:

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

你也可以用

boolean value =cursor.getString(boolean_column_index).equals("True");
boolean value = (cursor.getInt(boolean_column_index) == 1);

这里的大多数答案可能导致 NumberFormatExceptions 或“对于 null,int 类型,运算符是未定义的”,如果您存储 int 的列也允许保持 null。 正确的做法是使用

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

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

另一个选择

boolean value = (cursor.getString(column_index)).equals("1");

奥姆利特光标中发现的一个实现也检查 Null,而其他的答案都没有检查 Null。

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

Boolean b = (cursor.getInt (cursor.getColumnIndex (“ item”)) ! = 0) ;

boolean数据类型在 Cursor中不可用。

您将在 int中获得结果,因此需要将该 int值转换为 boolean

你可以选择

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

或者

boolean b = (cursor.getInt(boolean_column_index) != 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;
}

对于存储为 INTEGER的可选(可空)布尔值,可以创建 Kotlin 扩展:

fun Cursor.getBoolean(columnIndex: Int): Boolean? {
return if (isNull(columnIndex))
null
else
getInt(columnIndex) != 0
}

像这样使用它:

val value: Boolean? = cursor.getBoolean(boolean_column_index)

我用的就是这个:

    val work = Work()
work.id = cursor.getInt(0)
work.date = cursor.getString(1)
work.work_value = cursor.getFloat(2)
work.place = cursor.getString(3)
work.wind = cursor.getFloat(4)
work.isCompetition = cursor.getInt(5) > 0
return work

我在 Kotlin 也面临同样的问题。 数据库中有“ true/false”值 我用这个密码进入:

cursor.getString(4).toBoolean()

//首先作为字符串,然后将它们转换为布尔值