插入后获取生成的ID

Mar*_*los 133 java sqlite android

我正在使用SQLite和Android,我想知道获取我插入的行的生成ID的最佳方法.

我认为解决方案是在include之后进行搜索,但它看起来并不是最好的方法.

GrA*_*And 263

insert方法返回id刚插入的行或-1插入期间出错的行.

long id = db.insert(...);
Run Code Online (Sandbox Code Playgroud)

db是哪里的SQLiteDatabase.

  • 是的,它是一样的. (28认同)
  • 我读了规格."返回:新插入行的行ID,如果发生错误,则返回-1"rowId与我生成的字段"id primary key autoincrement"相同? (19认同)
  • @GrAnd,但如果我将删除表中的一些"start-middle"行,那么我将使用生成的id = n来打破第n行的序列.返回的行ID是否与生成的自动增量ID保持一致? (3认同)

Ahm*_*deh 12

如果使用 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) ;
Run Code Online (Sandbox Code Playgroud)

如果查询 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);
Run Code Online (Sandbox Code Playgroud)

如果使用房间

@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);
}
Run Code Online (Sandbox Code Playgroud)


小智 7

我查了资料。 insert方法使用sqlite3_last_insert_rowid函数返回一个id。根据文档:https : //www.sqlite.org/c3ref/last_insert_rowid.html 行 id 是隐藏列或类型的列(INTEGER PRIMARY KEY如果已声明)。

大多数 SQLite 表(表除外WITHOUT ROWID)中的每个条目都有一个唯一的64 位有符号整数键,称为“ rowid ”。rowid 始终可用作名为 ROWID、OID 或 _ROWID_ 的未声明列,只要这些名称也没有被显式声明的列使用。如果表有一个类型的列,INTEGER PRIMARY KEY那么该列是rowid 的另一个别名

所以这_ID通常是默认列