【发布时间】:2020-11-09 15:49:48
【问题描述】:
在我的 Android 应用程序中,我使用 Room 库来实现持久性。
假设,我有一个这样定义的实体:
@Entity(tableName = "my_entity")
public class MyEntity {
@ColumnInfo(name = "id")
@PrimaryKey(autoGenerate = true)
private int id;
//...
}
我可以相信id 将单调增加的事实吗,即对于新插入的行id 将始终高于所有先前创建的行?
我认为,这不太可能,但我可以想象,Room(或 SQLite - 我不确定,在这种情况下谁负责)可以例如尝试重用之前删除的行的 ID...
据我所知,官方文档并没有透露任何关于它的信息PrimaryKey.AutoGenerate()。
【问题讨论】:
-
很确定它使用 sqlite 自动增量。这确实保证了单调性。见这里:sqlite.org/autoinc.html 我会查看它创建的数据库文件并检查是否设置了属性
-
如果一个表有 3 个 ID 为 (1,2,3) 的项目。删除最后两个并插入一个后,它变为 (1,4)
-
@Yeldar.N: 简单的例子是这样的事实并不能证明它总是这样。
-
@JensV:感谢您提供指向相关 SQLite 文档的链接。事实上,我查看了生成的模式 json 文件,它有:
"createSql": "CREATE TABLE IF NOT EXISTS${TABLE_NAME}` (idINTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, ... )"`,所以根据文档它应该保证(通过 SQLite)是单调的。
标签: android android-room