SQLite 游标初始化不正确



我收到此错误:

java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行、第 28 行。 在从光标访问数据之前,请确保已正确初始化游标。

这是我的数据库处理程序类中的光标...是否有任何可见的错误?

    // retrieve a single friend
public Friend getFriend(int id){
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
Friend friend = null;
if( checkIsDataAlreadyInDBorNot( TABLE_FRIENDS, KEY_ID, id ) )
{
    Cursor cursor = sqLiteDatabase.query(TABLE_FRIENDS, new String[] { 
            KEY_ID, KEY_GEN, KEY_FIRSTNAME, KEY_MIDDLENAME, 
            KEY_LASTNAME, KEY_BD, KEY_BM, KEY_BY, KEY_RN, KEY_HC,
            KEY_HT, KEY_NB, KEY_NS, KEY_SP, KEY_RS, KEY_CH, KEY_P,
            KEY_FC, KEY_FMU, KEY_LFM, KEY_FMO, KEY_LFMG, KEY_FTS,
            KEY_FAF, KEY_LFFS, KEY_HO, KEY_OC, KEY_PP}, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
    {
        cursor.moveToFirst();
    }

    friend = new Friend(cursor.getInt(0),
            cursor.getString(1),
            cursor.getString(2),
            cursor.getString(3),
            cursor.getString(4),
            cursor.getInt(5),
            cursor.getInt(6),
            cursor.getInt(7),
            cursor.getInt(8),
            cursor.getString(9),
            cursor.getString(10),
            cursor.getString(11),
            cursor.getInt(12),
            cursor.getInt(13),
            cursor.getString(14),
            cursor.getString(15),
            cursor.getInt(16),
            cursor.getInt(17),
            cursor.getString(18),
            cursor.getString(19),
            cursor.getString(20),
            cursor.getString(21),
            cursor.getString(22),
            cursor.getString(23),
            cursor.getString(24),
            cursor.getString(25),
            cursor.getString(26),
            cursor.getString(27),
            cursor.getString(28));
}
return friend;
}

列索引从 0 开始,而不是从 1 开始。您的光标有 28 列,您正在尝试读取第 29 列。

请考虑改用getColumnIndex()(或者更好的是,getColumnIndexOrThrow())按列名获取列索引,而不是硬编码索引。

相关内容

最新更新