我在游标对象中选择查询的结果。我在表中有一些布尔列。SQLite 中布尔类型的值是 0 或 1,具体取决于它们分别是 false 还是 true。也有 int 类型的列,其值可以为 0 或 1 或其他整数值。我想从光标返回列的值,
if column is of boolean type
return true if value = 1
return false if value = 0
else
return the same value
我怎样才能做到这一点?
如何确定一列是否来自游标对象的布尔值?
所以起初,SQLite
没有布尔类型,只有整数、字符串、浮点数、blob。所以我的建议只是测试 int 列的值并根据结果执行适当的操作。
Cursor c = db.rawQuery(query, whereArgs);
int value = 0;
String[] intColumnNames = {columns};
int index = 0;
if (c.moveToFirst()) {
while (index < intColumnNames.length) {
do {
value = c.getInt(c.getColumnIndex(intColumnNames[index]));
switch (value) {
case 0:
// do some action
break;
case 1:
// do some action
break;
default:
// do some action for other cases
break;
}
} while(c.moveToNext());
index++;
}
}
因为我之前没有遇到过类似的问题所以我不能发布一个保证的答案。但是您的问题似乎真的很有趣,经过一番搜索后,我认为一种解决方案可能是一种选择..
在读取确定列的数据类型的数据之前的第一步。为此,以下链接可能会有所帮助
https://stackoverflow.com/a/6298521/931982
https://stackoverflow.com/a/3106349/931982
然后,如果您发现列类型为布尔类型,则遵循其他两个成员提供的任何解决方案。
注意这不是一个确定的答案,只是发表了我的想法。我会对此发表评论,但它太大而无法在评论中写:(
虽然 SQLite 确实没有 BOOLEAN 存储类型,但没有什么可以阻止您将 BOOLEAN 列定义为数据类型。它将被存储为 NUMERIC。您的应用程序可以使用 PRAGMA table_info( 来获取数据类型,并且只检查它是否为 BOOLEAN。
试试这个
int columnNumber = 11;
while (cursor.moveToNext()) {
if( cursor.getInt(columnNumber) > 0){
//true
}
}
由于 sqlite 中没有布尔数据类型才能使用布尔值,因此您需要具有数据类型INTEGER
SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).
更多详细信息