即使数据库不为空,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 ;
}
答案 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。
这就是我解决这个问题的方法。