【发布时间】:2022-01-29 01:16:49
【问题描述】:
即使数据库不为空,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 ;
}
【问题讨论】:
-
您确定光标为空吗?也许它只是没有任何行?您是否检查过您所做的查询是否会返回至少 1 个结果?
-
是的,我已经使用 Log 检查了数据库内容,而不是当我调用此方法时显示的 Stat 值,witch 始终为空。所以明白光标总是空的。
-
如果你这样做
Log.d("Foo", "Cursor is:" + cursor);会打印Cursor is: null吗?如果不打印null,则光标为空。空表示您的查询找到了 0 个符合条件的元素,您可能需要检查您的查询是否有误。 -
其打印:光标为:android.database.sqlite.SQLiteCursor@428085b0
-
所以你的光标不是空的,它是空的。这意味着您的数据库中没有任何内容与
KEY_USER_ID + "=?"匹配。检查id的值,您应该会看到没有与该值完全相同的内容。
标签: java android sqlite android-cursor