android - java.lang.IllegalStateException:迁移没有正确处理。表未更改
问题描述
我在尝试为房间迁移编写示例测试时遇到问题。当我运行测试时,我遇到了上述异常,但是导致问题的表在数据库版本之间没有变化。
Expected: TableInfo{name='UserSettings', columns={userLocalId=Column{name='userLocalId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=1, defaultValue='null'}, value=Column{name='value', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, key=Column{name='key', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=2, defaultValue='null'}}, foreignKeys=[], indices=[]}
found: TableInfo{name='UserSettings', columns={userLocalId=Column{name='userLocalId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=1, defaultValue='null'}, value=Column{name='value', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, key=Column{name='key', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=null}
我可以看到发现和预期之间的区别,但我不知道是什么原因造成的。我的 UserSettings.kt 类:
@Entity(tableName = "UserSettings", primaryKeys = ["userLocalId", "key"])
data class UserSettingsEntity(
@ColumnInfo(name = "userLocalId") val userLocalId: String,
@ColumnInfo(name = "key") val key: String,
@ColumnInfo(name = "value") val value: String
)
编辑 发现了它的已知问题,用于 Roboelectric 和迁移测试。 由于“primaryKeyPosition”值错误,房间数据库迁移测试出错
解决方案
这是拼写错误,请检查列名值的字类型
value=Column{name='value',tye ='TEXT',affinity='2',notNull=true
推荐阅读
- python - 带组的正则表达式解析。为什么最终输出包含额外的元组
- node.js - 如何在车把中导出异步功能?
- amazon-web-services - 由于尺寸过大,无法在 Amazon Connect 中导出联系流
- python-3.7 - 如何修复 ModuleNotFoundError:没有名为“pandas_datareader”的模块
- ios - iOS Swift:带有特殊字符的文件和文件夹的名称
- java - 如何读取 .txt 文件并将其结构切换为 2D 列表
- laravel - 在一个维度中连接来自另一个模型的单个列
- c - 我的 C 代码计算 k 的最小值,其总和大于用户输入 n 没有给我预期的结果?
- php - PHP mb_convert_encoding 不适用于查询
- r - 如何在 R 中进行 LOESS 平滑?