如何确定列是否是游标对象的布尔值?

时间:2013-03-11 09:19:46

标签: android sqlite cursor

我在游标对象中产生了一个select查询。我在表格中有一些布尔列。 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

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:1)

  

如何确定列是否是光标对象的布尔值?

首先,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++;
   }
}

答案 1 :(得分:0)

因为我之前没有遇到类似的问题所以我不能发布一个gurranteed答案。但是你的问题似乎很有意思,经过一番搜索后我认为一个解决方案可能是一个选择..

在读取确定列数据类型的数据之前的第一步。为此,以下链接可能会有所帮助

https://stackoverflow.com/a/6298521/931982

https://stackoverflow.com/a/3106349/931982

然后,如果您发现列类型是布尔值,则遵循其他两个成员提供的任何解决方案。

N.B。这不是一个确定的答案,只是发表了我的想法。我会评论这个,但是它太大了,不能写评论:(

答案 2 :(得分:0)

虽然SQLite没有BOOLEAN存储类型,但没有什么可以阻止您使用BOOLEAN作为数据类型定义列。它将存储为NUMERIC。您的应用程序可以使用PRAGMA table_info(获取数据类型,只有在BOOLEAN时才进行真/假检查。

答案 3 :(得分:-1)

试试这个

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). More Details