如何在 Android 上获得 SQLite数据库中布尔字段的值?
我通常使用 getString()、 getInt()等来获取字段的值,但似乎没有 getBoolean()方法。
getString()
getInt()
getBoolean()
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中不可用。
boolean
Cursor
您将在 int中获得结果,因此需要将该 int值转换为 boolean。
int
你可以选择
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 扩展:
INTEGER
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()
//首先作为字符串,然后将它们转换为布尔值