光标索引超出界限异常

时间:2011-07-19 07:46:59

标签: android database exception indexing cursor

在尝试对我的数据库执行查询时,我收到此异常。但是,文档说明方法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")));

2 个答案:

答案 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