Android:即使数据库不为空,Cursor也始终返回null

时间:2013-08-10 23:23:28

标签: java android sqlite cursor

即使数据库不为空,Cursor也始终返回null。为什么?以及如何解决?谢谢。

 public StatParcours getOneUserInfo(int id) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(TABLE_USER, new String[] { KEY_USER_ID,
            KEY_STUDN , KEY_STUDBD, KEY_TEACHN, KEY_TEACHBD}, KEY_USER_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);

    StatParcours stat = null;
    if ((cursor!= null)&&(cursor.moveToFirst())){      
        stat = new StatParcours(
            Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), 
            cursor.getString(2),
            cursor.getString(3),
            cursor.getString(4));
    }  
    return stat ;
}      

3 个答案:

答案 0 :(得分:2)

您正在将用户ID与字符串值进行比较,如果您的用户ID是数字,则该字符串值将永远不会成功。

在Android中,您应该仅将查询参数用于字符串值;你应该将整数直接嵌入查询字符串中:

cursor = db.query(..., ..., KEY_USER_ID + "=" + id, null, ...);

答案 1 :(得分:0)

你应该确定光标是否为null,如果没有,你需要确认cursor.getCount()不为零,你确定吗?

if (cursor!= null && cursor.getCount() > 0 && cursor.moveToFirst()){
    //do something
}

如果cursor为null或者cursor.getCount()为零,但数据库存在且数据正确,则应检测sql并在terminal或sql client中运行命令以解决此问题。

答案 2 :(得分:0)

如果您没有特定要求,则在创建数据库时CursorFactory值应为null。

这就是我解决这个问题的方法。