如何获取我刚刚添加到数据库中的最新对象的id?

时间:2013-11-04 08:23:36

标签: android database

我创建了一个包含名称,信息的数据库,并为每个保存到数据库的对象提供了一个“_id”。

现在我想用下一个函数来获得新添加的对象获得的id - 我已经尝试了下一个代码 - 但我确定它不是正确的方式

public long insertAuto(Student student){
        SQLiteDatabase db = dbOpen.getWritableDatabase();

        ContentValues vals = new ContentValues();
        vals.put(Constants.STUDENT_NAME, student.getName());
        vals.put(Constants.STUDENT_INFO, movie.getInfo());

        db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);

            //this is where i thinks is my mistake! 
        long id = student.getId();

        db.close();

        return  id;
    }

非常感谢您提供任何帮助

5 个答案:

答案 0 :(得分:3)

查看SQLiteDatabase.insert()

的文档

它会为您返回新插入的rowId。

public long insertAuto(Student student){
    SQLiteDatabase db = dbOpen.getWritableDatabase();

    ContentValues vals = new ContentValues();
    vals.put(Constants.STUDENT_NAME, student.getName());
    vals.put(Constants.STUDENT_INFO, movie.getInfo());

    long id = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);

    db.close();

    return  id;
}

答案 1 :(得分:2)

使用SQLiteDatabase.insert()方法的返回值。

documentation状态时,此方法返回

the row ID of the newly inserted row, or -1 if an error occurred 

答案 2 :(得分:0)

你可以试试这个:

 String query = "SELECT ROWID from TABLE_NAME_STUDENTS order by ROWID DESC limit 1";

 Cursor c = db.rawQuery(query);

 if (c != null ) {

     c.moveToFirst();
     id = c.getLong(0);
 }

答案 3 :(得分:0)

1 /如果您自己在应用程序中生成id,那么您正在做的是正确的。

lastId = theLastSavedStudentObject.get(id);

2 /看看你的代码,似乎你让数据库自动生成id(也许是MySQL自动增量),然后必须从数据库中选择最后一个id或者从insert函数返回。

lastSaveId = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);

使用此SQL查询直接从DB查询:

select max(id) from mytable;   (for autoincrement ID)

答案 4 :(得分:0)

每当您运行查询以在数据库上插入时,它都会将当前插入行的行ID作为long值返回。

long id = db.insert(Constants.TABLE_NAME_STUDENTS, null, vals);
return id;

此行ID将是唯一的,可用于进一步查询。