我创建了一个包含名称,信息的数据库,并为每个保存到数据库的对象提供了一个“_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;
}
非常感谢您提供任何帮助
答案 0 :(得分:3)
它会为您返回新插入的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将是唯一的,可用于进一步查询。