【发布时间】:2021-12-07 01:56:38
【问题描述】:
总结
我正在使用 createFromAsset() 预先填充数据库它可以工作,现在我需要向数据库添加索引,但是 Room 无法处理此更改。
速记
此数据库未投入生产,我在进行更改后重新安装了应用程序,我的问题不是如何从版本 X 迁移到 Y 的常见问题。
代码
这是我的实体
@Entity(tableName = "myTable", indices = [Index(value = ["col1","col2"], name = "myIndex")])
...
我运行了以下查询以将索引添加到预填充的数据库中
CREATE INDEX myIndex ON myTable (col1,col2)
进行这些更改后,我重新安装了应用程序以避免数据库版本问题。
问题是 Room 总是无法验证数据完整性,增加版本不是一个选项,如果(且仅当)我先安装版本 1 然后增加版本,它确实可以解决问题。
迁移也必须为空才能工作,执行以下查询失败,因为myIndex 已经存在:
db.execSQL("CREATE INDEX myIndex ON myTable (col1,col2)")
我尝试了什么
- 在
onCreate函数中从RoomDatabase.Callback()本地运行查询,而不是直接从资产中导入。
想知道...
我似乎无法理解为什么 Room 抱怨索引,它拒绝添加它,因为它已经存在,运行空迁移解决了问题,不运行任何迁移会给我一个验证异常。
问题是我无法运行空迁移来修复它,因为迁移根本不会运行,因为该数据库尚未投入生产。
我感到迷茫。
【问题讨论】:
标签: android android-room