0

我正在使用以下查询查询数据库:

    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"

对于同一个表并给出获取游标的计数,它给了我正确的现有记录数)。

请帮忙...

4

3 回答 3

3

您绝对应该通读整个帖子Cursor Index Out of Bounds Exception。它处理完全相同的问题,您可以在那里得到问题的答案。从帖子中获取并添加@Alexey 指出的内容,Cursors延迟加载的,您需要调用moveToFirst()moveToPosition()等方法将它们加载到内存中。moveToFirst将光标移动到第一行,以便您可以访问它。同样,moveToPosition()将光标移动到绝对位置。如果不使用这些函数,它会抛出你得到的错误。希望这可以帮助。

于 2013-05-30T04:10:21.483 回答
1
if(subject_cursor.moveToFirst()) 
    subject_cursor.getString(0);
于 2013-05-30T03:56:20.760 回答
0

将您的代码更改为

 final Cursor subject_cursor = db.rawQuery("SELECT * FROM " + DB.Table.SUBJECT + " WHERE uniqueSUB = '" + cs_cursor.getString(0) + "'", null);

因为您的表中只有 1 行,并且您正在尝试使用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());
    }


}
于 2013-05-30T04:03:41.850 回答