0

我创建了一个包含名称、信息的数据库,并且还为每个保存到数据库的对象提供了一个“_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;
    }

所以谢谢你的帮助

4

5 回答 5

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;
}
于 2013-11-04T08:33:31.513 回答
2

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

文档所述,此方法返回

the row ID of the newly inserted row, or -1 if an error occurred 
于 2013-11-04T08:27:34.973 回答
0

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

lastId = theLastSavedStudentObject.get(id);

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

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

或使用此 SQL 查询直接从数据库查询:

select max(id) from mytable;   (for autoincrement ID)
于 2013-11-04T08:38:35.060 回答
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);
 }
于 2013-11-04T08:28:32.890 回答
0

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

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

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

于 2013-11-04T08:45:34.750 回答