如何获得身体反应中的自动增量值?
代码
git log --author="John"
第一列(_ID)是自动增量字段。是否有机会获得这个价值? student.getId() - 这不是来自数据库的id,这是不同的id。
答案 0 :(得分:1)
如果更改代码以使用db.insert(),则此方法返回插入行的ID - 请参阅Get generated id after insert。
如果您希望继续编译语句,还有一个专门的SQLite函数来获取最后插入的行,请参阅Best way to get the ID of the last inserted row on SQLite
编辑:使用db.insert()的示例。这没有经过测试,但应该非常接近功能。
db.beginTransaction();
boolean success = true;
final ContentValues values = new ContentValues();
for (final Student student: students) {
values.put("student_id", student.getId());
values.put("first_name", student.getFirstName());
values.put("last_name", student.getLastName());
values.put("birthday", student.getBirthday());
final long id = db.insert("my_table", null, values);
if (id == -1) {
success = false;
break;
}
// TODO do your thing with id here.
}
if (success) {
db.setTransactionSuccessful();
}
db.endTransaction();
答案 1 :(得分:1)
而不是statement.execute()
,您可以statement.executeInsert()
。这将返回插入行的行ID。或者,正如@Tom建议的那样,您可以改为使用db.insert()
,它也会返回插入的行ID。使用像现在这样的编译语句会更快。
如果您想尝试db.insert()
方法,它看起来像这样:
ContentValues values = new ContentValues();
for (Student student: students) {
// use whatever constants you have for column names instead of these:
values.put(COLUMN_STUDENT_ID, student.getId());
values.put(COLUMN_STUDENT_FIRSTNAME, student.getFirstName());
values.put(COLUMN_STUDENT_LASTNAME, student.getLastName());
values.put(COLUMN_STUDENT_BIRTHDAY, student.getBirthday());
db.insert(StudentEntry.TABLE_NAME, null, values);
}