Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 对sqlite返回的行id的澄清';s insert语句_Android_Sqlite - Fatal编程技术网

Android 对sqlite返回的行id的澄清';s insert语句

Android 对sqlite返回的行id的澄清';s insert语句,android,sqlite,Android,Sqlite,好的,我们看到SQLiteinsert语句返回一个名为row id的语句 插入时,我们知道SQLite像一个名为ID的主键列,如果插入的ID值为null,它将自动生成一个适当的值 缺少的关键是确认SQLiteDatabase.insert()方法返回的行id实际上是为行的主键自动生成的值。(Oracle并非如此……) 请有人确认还是否认 分辨率 好的,从@sixfeetsix发布的链接来看: SQLite表中的每个条目都有一个唯一的64位有符号整数键,称为“rowid”。rowid始终作为未声明

好的,我们看到
SQLite
insert语句返回一个名为
row id
的语句

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

缺少的关键是确认
SQLiteDatabase.insert()
方法返回的
行id
实际上是为行的主键自动生成的值。(Oracle并非如此……)

请有人确认还是否认

分辨率

好的,从@sixfeetsix发布的链接来看:

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

然后他的
auto increment
链接验证
row\u id
和auto increment值是否相同

谢谢,伙计们

返回:

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

这可能会让未初始化的人感到困惑,但它要么是
整型主键
字段,要么是一个名为ROWID的64位未声明列


因此,当您在中插入NULL或no值时,将返回生成的值。

它们是两个独立的东西

insert()
返回的行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'

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

当您尝试查看insert方法是否返回实际的行id时,会发生什么情况?我还没有了解到这一点。我怀疑返回的值实际上是自动生成的数字。但是,如果我插入第一行,并返回值“1”,这并不意味着返回的值总是自动生成的数字。现在,如果返回其他数字,我当然会知道。我把代码都拆开了,花了一段时间让它编译。一旦我能够运行它,返回的值就是一个合理的自动生成值。简言之,我不确定。所以我还有一点工作要做。我必须纠正我自己。我认为它们是两个不同的概念,但正如@sixfeetsix所说,SQLite将它们联系在一起。