为什么会得到这个CursorIndexOutOfBoundsException?

时间:2016-03-14 17:10:08

标签: android android-sqlite

我正在尝试检查我的数据库中是否已存在某个人。

public Person personExistsInDatabase(String nickname){
    Person personToReturn = null;
    SQLiteDatabase sqliteDB = this.getReadableDatabase();
    String query = "SELECT _id, firstName, lastName FROM " + PERSON_TABLE + " WHERE nickname = '" + nickname + "'";
    Cursor cursor = sqliteDB.rawQuery(query, null);

    if(cursor.getCount() > 0){
        personToReturn = new Person(cursor.getInt(0), cursor.getString(1), cursor.getString(2));
    }

    cursor.close();
    sqliteDB.close();

    return personToReturn;
}

我得到的错误是:

android.database.CursorIndexOutOfBoundsException: Index -1 requested with a size of 1

我正在接受这条线:

personToReturn = new Person(cursor.getInt(0), cursor.getString(1), cursor.getString(2));

如果此人不存在,那么我添加它们。如果此人确实存在,那么我将使用新信息进行更新。

2 个答案:

答案 0 :(得分:1)

你需要做

if(cursor.moveToFirst()){
    personToReturn = new Person(cursor.getInt(0), cursor.getString(1), cursor.getString(2));
}

这会将光标移动到第一个位置,并且还允许您检查以确保其中包含某些内容

答案 1 :(得分:0)

替换以下代码。

    if(cursor.moveToFirst()){ 
        personToReturn = new Person(
    cursor.getInt(cursor.getColumnIndex("your_column_name")), 
    cursor.getString(cursor.getColumnIndex("your_column_name")), 
    cursor.getString(cursor.getColumnIndex("your_column_name"))
     );
    }