在尝试对我的数据库执行查询时,我收到此异常。但是,文档说明方法SQLiteDatabase.query(...)
返回“一个Cursor对象,它位于第一个条目之前”,我将其解释为意味着Cursor位于返回的行的开头。如果我在访问Cursor中的数据之前添加Cursor.moveToFirst()
,我没有异常。到底是怎么回事?在尝试获取数据之前,是否需要始终调用“moveToFirst”?文档说这个方法,“将光标移动到第一行。”
Cursor c = db.query(TABLENAME, null, null, null, null, null, null);
Log.d("TAG",""+c.getInt(c.getColumnIndex("_id")));
答案 0 :(得分:12)
查询完毕后,您需要致电next()
或moveToFirst()
。游标被延迟加载,在调用这些方法后,游标被加载到内存中。你可以决定何时这样做。
答案 1 :(得分:2)
遍历所有行:
Cursor c = db.query(TABLENAME, null, null, null, null, null, null);
while(c.moveToNext()) {
int id = c.getInt(c.getColumnIndex("_ID"));
}
或者你可以使用其他游标函数,例如moveToPosition()来访问id指定的行
更多信息:http://developer.android.com/reference/android/database/Cursor.html