交易主体中的自动增量值

时间:2017-02-20 23:45:20

标签: android sql sqlite transactions

如何获得身体反应中的自动增量值?

代码

git log --author="John"

第一列(_ID)是自动增量字段。是否有机会获得这个价值? student.getId() - 这不是来自数据库的id,这是不同的id。

2 个答案:

答案 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);
}