5

好的,我们在这里看到SQLite插入语句返回了一个名为row id.

插入时,我们知道它SQLite喜欢一个名为 ID 的主键列,如果插入的 ID 值为空,它将自动生成适当的值。

缺少的粘合剂是确认该方法row id返回的SQLiteDatabase.insert()实际上是为行的主键自动生成的值。(这不是甲骨文的情况......)

请问有人确认还是否认?

解析度

好的,所以从@sixfeetsix 发布的链接中:

SQLite 表中的每个条目都有一个唯一的 64 位有符号整数键,称为“rowid”。rowid 始终可用作未声明的列...如果表具有 INTEGER PRIMARY KEY 类型的列,则该列是 rowid 的另一个别名。

然后他的auto-increment链接验证row_id和自动增量值将是相同的值。

这是一个包装,谢谢,伙计们!

4

2 回答 2

4

Android insert(...) 方法返回:

新插入行的行 ID,如果发生错误,则为 -1

这可能会让初学者感到困惑,但sqlite 中的行 ID要么是integer primary key字段,要么是在没有字段的情况下,是一个名为 ROWID 的 64 位未声明的列。

因此,当您在自动增量字段中插入 NULL 或无值时,将返回生成的值。

于 2012-04-28T13:47:08.363 回答
2

它们是两个不同的东西。

返回的row_idinsert()是插入行的唯一标识符,是SQLite内部使用的标识符。

另一方面,您可以在表中有一列表示您的业务键,声明:

_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT

因此 SQLite 将为您生成该列的值。

据我所知,SQLite 中没有像 SQL Server 的 SCOPE_IDENTITY() 那样的函数(它返回最后一个自动增量插入的 id)。

因此,如果您进行了插入并需要检索自动生成的 id,您可以执行以下操作:

SELECT seq FROM sqlite_sequence WHERE name='tableName'

但请注意,这在并发场景中不是一种安全的方式。

于 2012-04-28T13:49:14.037 回答