Android 原始查询不工作

Android 原始查询不工作,android,mysql,sqlite,Android,Mysql,Sqlite,我正在向表中插入数据,然后获取插入项的id,但我的原始查询返回:android.database.CursorIndexOutOfBoundsException:Index-1已请求,大小为1 SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COL_FIRST_NAME, athlete.getFirstName());

我正在向表中插入数据,然后获取插入项的id,但我的原始查询返回:android.database.CursorIndexOutOfBoundsException:Index-1已请求,大小为1

SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(COL_FIRST_NAME, athlete.getFirstName());
    values.put(COL_LAST_NAME, athlete.getLastName());
    values.put(COL_AGE, athlete.getAge());
    values.put(COL_GRADE, athlete.getGrade());

    db.insert(TABLE_ATHLETES, null, values);

    Cursor cursor = db.rawQuery("SELECT MAX(" + COL_ATHLETE_ID + ") AS " + COL_ATHLETE_ID +
    " FROM " + TABLE_ATHLETES, null);
    int id = cursor.getInt(cursor.getColumnIndex(COL_ATHLETE_ID));
    athlete.setAthleteID(id);
    Log.e("", "ID: " + id);

SQLite查询方法返回位于第一个条目之前的游标对象。在尝试读取光标之前,需要调用moveToFirst()或moveToNext(),例如:

cursor.moveToFirst();
该方法还返回一个布尔值,指示它是否成功。例如,如果结果集为空,它将返回false,并且您将知道不尝试读取值。在您的特定情况下,查询的性质是它应该始终返回一行,因此可以说不需要这样的测试。因此,上面的一行代码就足够了