5

即使数据库不为空,光标也始终返回 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 ;
}      
4

3 回答 3

2

You are comparing the user ID against a string value, which will never succeed if your user IDs are numbers.

In Android, you should use query parameters only for string values; you should embed integers directly into the query string:

cursor = db.query(..., ..., KEY_USER_ID + "=" + id, null, ...);
于 2013-08-11T07:28:41.493 回答
0

你应该输入游标是否为空,如果不是,你需要确认 cursor.getCount() 不为零,你确定吗?

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

如果 cursor 为 null 或 cursor.getCount() 为零,但数据库存在且数据正确,则应检测您的 sql 并在终端或 sql 客户端中运行命令来解决此问题。

于 2013-08-11T00:05:14.533 回答
0

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

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

于 2016-01-19T11:28:19.360 回答