插入后获取生成的ID
我检查了来源。 insert
方法使用sqlite3_last_insert_rowid
函数返回一个id。 根据文档:https://www.sqlite.org/c3ref/last_insert_rowid.html 行标识是隐藏列或类型为INTEGER PRIMARY KEY
的列(如果已声明)。
所以这是默认_ID
柱通常
我有相当多的与此有关MySQL的问题,LAST_INSERT_ID是不可靠的方式来获得ID,如果有用户锤击数据库时,ID返回可能不是您运行的查询插入的ID,其他几个用户可能会影响此ID的返回。我们的服务器平均每分钟有7000个用户在捶打,而且它总是绊倒。
我们的解决方案是使用您插入的查询中的数据,然后使用该数据搜索该结果。无论如何,你正在做一个寻找最后一个ID的请求。所以你不妨做一个SELECT ID FROM表,其中field = var和field = var来获得id。它在查询中性能稍差,但返回的结果更加可靠。
中有详细记录这要求每行的列值是唯一的(或者大多数是唯一的),否则会有返回多个ID的风险。 – 2016-06-20 01:18:00
如果使用ContentValues:
DBHelper db =new DBHelper();// your dbHelper
ContentValues values = new ContentValues();
values.put("firstName","Ahmad");
values.put("lastName","Aghazadeh");
long insertedId= db.getSQLiteDatabase().insert("user", "", values) ;
如果查询EXEC使用select last_insert_rowid()
String sql = "INSERT INTO [user](firstName,lastName) VALUES (\"Ahmad\",\"Aghazadeh\"); select last_insert_rowid()";
DBHelper itemType =new DBHelper();// your dbHelper
c = db.rawQuery(sql, null);
if (c.moveToFirst())
result = c.getLong(0);
人们可以使用last_insert_rowid()
简单地得到最后插入的行_id。示例代码如下。
/**
* Return Last inserted row id(auto incremented row) (_id)
* @return
*/
public int getLastAddedRowId() {
String queryLastRowInserted = "select last_insert_rowid()";
final Cursor cursor = database.rawQuery(queryLastRowInserted, null);
int _idLastInsertedRow = 0;
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
_idLastInsertedRow = cursor.getInt(0);
}
} finally {
cursor.close();
}
}
return _idLastInsertedRow;
}
我在规格上阅读。 “返回:新插入的行的行ID,如果发生错误,则返回-1”rowId与我生成的字段“id主键autoincrement”相同? – 2011-03-23 18:28:42
是的,它是一样的。 – GrAnd 2011-03-23 18:33:25
谢谢!经过测试和批准。 – 2011-03-23 18:35:38