7

以下是我用来获取与我的 sqlite db 表中的特定字段相对应的 int 值的查询。

"SELECT conn_status FROM profiles WHERE devID = '" + id+"'"

如果没有为与提供的 devID 对应的“conn_status”保存值,则表中的现有值将为空。我从 java 中检索数据,如下所示:

c.getInt(c.getColumnIndex("conn_status"))

这里的问题是,对于给定的 query ,即使字段中存在的值为 null,c.getInt 也会返回 0。如何修改此查询,使其返回不同的值而不是 0,例如 5,如果值为空。

任何帮助表示赞赏。

4

7 回答 7

17

您可以使用该isNull()功能。这是一个例子:

static int getInt(String columnName)
{
    if(c.isNull(c.getColumnIndex(columnName)))
        return -1;
    return c.getInt(c.getColumnIndex(columnName));
}
于 2012-09-24T13:23:00.420 回答
16

在 SQLite 中,您可以使用该IFNULL函数来替换NULL值:

SELECT IFNULL(conn_status, 5) FROM profiles WHERE devID = ?
于 2012-09-24T15:18:08.210 回答
3

int在 Java 中是原始数据类型,不能是null. 因此,如果您的 getInt 没有返回值,您将得到 0。Integer 对象可能为空,因此如果您的逻辑要求您检查空值而不是 0,您可能需要考虑使用 Integer 而不是 int

于 2012-09-24T13:23:38.250 回答
2

如果列具有空值,则您想要任何不同的值,例如 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() 返回一些东西意味着查询工作和数据库没有空值。如果返回相反的意思是查询不起作用并且数据库对于相应的查询具有空值。所以尝试一次。

于 2016-10-24T12:06:01.890 回答
0

在 Android 中使用 Integer 对象而不是 int 原始,Integer 可以为空,原始 int 导致异常。在模型中验证值是否为空或处理内容。

/**
 * 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;
    }
}
于 2015-04-13T19:41:49.227 回答
0

您可以通过调用 getType() 来判断该列是否为空。

Integer locationInfoId;

if (cursor.getType(columnIndex) == Cursor.FIELD_TYPE_NULL){
    locationInfoId = null;
} else {
    locationInfoId = cursor.getInt(columnIndex);
}

columnIndex++;
于 2016-10-24T07:39:29.740 回答
0

我遇到了同样的问题,即在调用中NULL返回0了一个所谓的值c.getInt(index)

事实证明,我的数据库的文本值为 null. 也就是说,不是 0 字节值,而是NULL4 个字符'n' 'u' 'l' 'l'。这很令人困惑,因为null看起来是正确的。直到我用 SQLite 数据库浏览器检查了数据库,我才发现它。

当我替换这些文本值时,事情按预期工作。

我知道这是一个老问题,但希望这会为其他人节省一些故障排除时间。

于 2017-03-22T21:40:58.333 回答