问题
我正在使用SQLite与Android,我想知道获取我插入的行的生成ID的最佳方法。
我认为解决方案是在include之后进行搜索,但它看起来并不是最好的方法。
#1 热门回答(246 赞)
Theinsert
方法返回刚刚插入的行的id
或者在插入过程中出现错误.-1
。
long id = db.insert(...);
其中db是SQLiteDatabase
。
#2 热门回答(4 赞)
如果使用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);
如果使用房间
@Entity
class User {
@PrimaryKey(autoGenerate = true)
public int id;
//...
}
@Dao
public interface UserDao{
@Insert(onConflict = OnConflictStrategy.REPLACE)
long insert(User user);
// Insert multiple users
@Insert(onConflict = OnConflictStrategy.REPLACE)
long[] insert(User... user);
}
#3 热门回答(3 赞)
我检查了sources.insert
方法usesqlite3_last_insert_rowid
function来返回一个id。根据文档:https://www.sqlite.org/c3ref/last_insert_rowid.html行id是隐藏列或类型为INTEGER PRIMARY KEY
的列,如果它已声明。
所以这通常是默认的_ID
列