以下是我用来获取与sqlite db表中特定字段对应的int值的查询。
"SELECT conn_status FROM profiles WHERE devID = '" + id+"'"
如果没有为与提供的devID相对应的'conn_status'保存值,则表中的现有值将为null。我从java中检索数据,如下所示:
c.getInt(c.getColumnIndex("conn_status"))
这里的问题是,使用给定的查询,即使字段中存在的值为null,c.getInt也会返回0。如何修改此查询,如果值为null,则返回不同的值而不是0,例如5。
感谢任何帮助。
答案 0 :(得分:17)
您可以使用isNull()
功能。这是一个例子:
static int getInt(String columnName)
{
if(c.isNull(c.getColumnIndex(columnName)))
return -1;
return c.getInt(c.getColumnIndex(columnName));
}
答案 1 :(得分:16)
在SQLite中,您可以使用IFNULL
函数替换NULL
值:
SELECT IFNULL(conn_status, 5) FROM profiles WHERE devID = ?
答案 2 :(得分:3)
int
是一种原始数据类型,不能是null
。因此,如果getInt没有返回值,则得0。
Integer对象可能为null,因此如果您的逻辑要求您检查空值而不是0,那么您可能需要考虑使用Integer而不是int
答案 3 :(得分:2)
如果您想要任何不同的值,如果列具有空值,则尝试使用以下代码。
Cursor c = db.rawQuery("SELECT conn_status FROM profiles WHERE devID = '" + id+"'");
if(c.getCount>0){
int number = c.getInt(c.getColumnIndex(conn_status));
return number;
}else{
return 5;
}
如果cursor.getCount()返回某事意味着查询工作和数据库没有空值。如果返回相反意味着查询不起作用,并且数据库具有针对各个查询的空值。所以尝试一次。
答案 4 :(得分:0)
在Android中使用Integer对象不是int原语,Integer是可空的,原始int导致异常。在Model中验证value是否为null或处理内容。
/**
* Return real integer of value or null
* @param column_name Name of column in result
*/
public Integer getInt(String column_name){
try{
if(cursor.isNull(cursor.getColumnIndex(column_name)))
return null;
return cursor.getInt(cursor.getColumnIndex(column_name));
}catch(Exception e){
e.printStackTrace();
Log.e("sqlite_exception", "column " + column_name + " not exists. " + e.getMessage());
return null;
}
}
答案 5 :(得分:0)
您可以通过调用getType()来判断列是否为空。
Integer locationInfoId;
if (cursor.getType(columnIndex) == Cursor.FIELD_TYPE_NULL){
locationInfoId = null;
} else {
locationInfoId = cursor.getInt(columnIndex);
}
columnIndex++;
答案 6 :(得分:0)
我在NULL
来电中返回0
的 c.getInt(index)
值存在同样的问题。
事实证明,我的数据库的文本值为 null
。也就是说,代替 NULL
的0字节值,有4个字符'n' 'u' 'l' 'l'
。这很令人困惑,因为null
看起来是正确的。在用SQLite数据库浏览器检查数据库之前,我没有抓住它。
当我替换这些文本值时,事情按预期工作。
我知道这是一个老问题,但希望这会为其他人节省一些故障排除时间。