我使用以下查询查询数据库:
final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(1) + "'", null);
当我记录光标计数时它给我1作为计数,但是当我尝试使用 subject_cursor.getString(0)来访问数据时,它给出了一个错误说:
05-30 03:37:10.921: W/System.err(5408): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
我已手动检查数据库中的记录,并且存在所有必需的数据。 (如果我只是进行以下查询:
"SELECT * FROM " + DB.Table.SUBJECT"
对于同一个表并给出获取光标的计数,它给出了正确的现有记录数。)
请帮忙......
答案 0 :(得分:2)
你绝对应该阅读整篇文章Cursor Index Out of Bounds Exception。它处理完全相同的问题,你可以在那里得到你的问题的答案。从帖子中获取并添加@Alexey指出的内容,Cursors
为lazy loaded,您需要调用moveToFirst()或moveToPosition()等方法将其加载到内存中。 moveToFirst
将光标移动到第一行,以便您可以访问它。同样,moveToPosition()
将光标移动到绝对位置。如果不使用这些函数,它将抛出您所获得的错误。希望这可以帮助。
答案 1 :(得分:1)
if(subject_cursor.moveToFirst())
subject_cursor.getString(0);
答案 2 :(得分:0)
将您的代码更改为
final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(0) + "'", null);
因为您的表格中只有一行,而您正尝试使用cs_cursor.getString(1)
或试试这段代码,
public void getAllEvents() {
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_EVENTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
// Adding contact to list
MainActivity.Id.add(cursor.getString(0)); //it will store id to my array list "Id"
} while (cursor.moveToNext());
}
}