Android 即使值为null,Sqlite查询仍返回0
下面是我用来获取对应于sqlite db表中特定字段的int值的查询Android 即使值为null,Sqlite查询仍返回0,android,sqlite,Android,Sqlite,下面是我用来获取对应于sqlite db表中特定字段的int值的查询 "SELECT conn_status FROM profiles WHERE devID = '" + id+"'" 如果没有为所提供的设备对应的“conn_status”保存值,则表中的现有值将为null。我从java检索数据,如图所示: c.getInt(c.getColumnIndex("conn_status")) 这里的问题是,对于给定的查询,即使字段中存在的值为null,c.getInt也返回0。如何修改此查
"SELECT conn_status FROM profiles WHERE devID = '" + id+"'"
如果没有为所提供的设备对应的“conn_status”保存值,则表中的现有值将为null。我从java检索数据,如图所示:
c.getInt(c.getColumnIndex("conn_status"))
这里的问题是,对于给定的查询,即使字段中存在的值为null,c.getInt也返回0。如何修改此查询,使其在值为null时返回不同的值,而不是0(例如5)
非常感谢您的帮助。您可以使用
isNull()
函数。下面是一个例子:
static int getInt(String columnName)
{
if(c.isNull(c.getColumnIndex(columnName)))
return -1;
return c.getInt(c.getColumnIndex(columnName));
}
Java中的
int
是基本数据类型,不能为null
。因此,如果getInt没有返回值,则得到0。
整数对象可能是NULL,所以您可能需要考虑使用整数而不是int,如果您的逻辑需要检查空值,而不是在SQLite中使用0的< P>,则可以使用该函数替换<代码> null 值:
SELECT IFNULL(conn_status, 5) FROM profiles WHERE devID = ?
在Android中,使用整型对象而不是整型原语,整型可为空,原语整型导致异常。在模型中验证值是否为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;
}
}
可以通过调用getType()来判断列是否为null
由于您需要任何不同的值,如5,若列具有空值,请尝试以下代码
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()返回某个值,则表示查询工作和数据库没有空值。若返回相反的值,则表示查询不起作用,并且数据库的相应查询值为空。所以试一下。在
c.getInt(index)
调用中,我遇到了一个假定为NULL
的值返回0
的问题
结果表明,我的数据库的文本值为null
。也就是说,不是0字节的值NULL
,而是4个字符'n''u''l''l'
。这令人困惑,因为null
看起来是正确的。直到我用SQLite数据库浏览器检查了数据库,我才捕捉到它
当我替换这些文本值时,一切都如期进行
我知道这是一个老问题,但希望这能为其他人节省一些故障排除时间。更好地练习返回整数非原语int和返回null非-1,并控制模型中的错误。
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;
}