插入后获取生成的ID

我正在使用Android的SQLite,我想知道最好的方式来获取我插入的行的生成的ID。

一个解决scheme,我觉得包括之后进行search,但它不是最好的方式。

insert方法返回刚刚插入的行的id ,如果在插入过程中发生错误,则返回-1

 long id = db.insert(...); 

其中db是SQLiteDatabase

我检查了消息来源。 insert方法使用sqlite3_last_insert_rowid函数返回一个id。 根据文档: https : //www.sqlite.org/c3ref/last_insert_rowid.html行标识是隐藏的列或INTEGER PRIMARY KEYtypes的列(如果已声明)。

所以这通常是默认的_ID

如果使用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); 

在mySQL上我遇到了一些问题,LAST_INSERT_ID不是获取ID的可靠方式,如果用户敲击数据库,返回的ID可能不是您运行的查询插入的ID,几个其他用户可能会影响这个ID的返回。 我们的服务器平均每分钟有7000个用户,而且总是绊倒。

我们的解决scheme是使用插入的查询中的数据,然后使用该数据search结果。 无论如何,你正在做一个请求寻找最后一个ID。 所以你不妨做一个SELECT ID FROM表,其中field = var和field = var来获得id。 它在查询中性能稍差,但返回的结果更加可靠。