好的,我们看到here SQLite
insert语句返回名为row id
的内容。
插入时,我们知道SQLite
喜欢名为ID的主键列,如果插入的ID值为空,则会自动生成适当的值。
缺少的胶水是确认row id
方法返回的SQLiteDatabase.insert()
实际上是行的主键自动生成的值。 (这不是Oracle的情况......)
请问有人确认或否认吗?
解决
好的,所以来自@sixfeetsix发布的链接:
SQLite表中的每个条目都有一个唯一的64位有符号整数键,称为“rowid”。 rowid始终作为未声明的列提供...如果表具有INTEGER PRIMARY KEY类型的列,则该列是rowid的另一个别名。
然后他的auto-increment
链接会验证row_id
和自动增量值是否相同。
这是一个包装,谢谢,伙计们!
答案 0 :(得分:4)
新插入行的行ID,如果发生错误,则返回-1
这可能会让外行人感到困惑,但row id in sqlite或者是integer primary key
字段,或者在没有字段的情况下,是一个名为ROWID的64位未声明的列。
因此,当您在auto-increment field中插入NULL或没有值时,将返回生成的值。
答案 1 :(得分:2)
它们是两个不同的东西。
insert()
返回的row_id是插入行的唯一标识符,它是SQLite内部使用的标识符。
另一方面,您可以在表格中添加一个代表您的业务关键字的列,声明:
_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
因此,SQLite将为您生成该列的值。
据我所知,SQLite中没有这样的函数,比如SQL Server的SCOPE_IDENTITY()(返回最后一个自动增量插入的id)。
所以,如果你做了一个插入并需要检索自动生成的id,你可以这样做:
SELECT seq FROM sqlite_sequence WHERE name='tableName'
但请注意,这在并发场景中并不安全。