Указатель курсора за пределами исключения - PullRequest
2 голосов
/ 19 июля 2011

При попытке выполнить запрос к моей базе данных я получаю это исключение. Однако в документации говорится, что метод SQLiteDatabase.query(...) возвращает «объект Cursor, который расположен перед первой записью», что, как я понимаю, означает, что курсор находится в начале возвращаемых строк. Если я добавлю Cursor.moveToFirst() перед доступом к данным в Курсоре, я не получу исключения. Что здесь происходит? Нужно ли мне всегда вызывать «moveToFirst», прежде чем пытаться получить данные? В документации говорится, что этот метод «перемещает курсор в первую строку».

Cursor c = db.query(TABLENAME, null, null, null, null, null, null);
Log.d("TAG",""+c.getInt(c.getColumnIndex("_id")));

Ответы [ 2 ]

12 голосов
/ 19 июля 2011

После запроса вам нужно позвонить next() или moveToFirst().Курсоры загружаются лениво, после вызова этих методов курсор загружается в память.Вы можете решить, когда это сделать.

2 голосов
/ 19 июля 2011

для перебора всех строк:

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

...