Room数据库抛出IllegalStateException:架构变更后无法验证数据完整性怎么办?
解决Room数据库IllegalStateException异常的方案
问题原因
java.lang.IllegalStateException:Room无法验证数据完整性。看起来您已更改架构但忘记更新版本号。您只需增加版本号即可解决此问题。
这个异常触发的核心是:你修改了Room数据库的实体类(比如新增字段、修改表结构等),但没有更新数据库的版本号。Room通过版本号与架构哈希值的匹配来验证数据完整性,架构变更后哈希值改变,版本号未同步升级就会抛出该异常。
具体解决步骤
第一步:更新数据库类的版本号
在你的TaskDatabase类的@Database注解中,将version参数的值在原有基础上加1。比如之前版本是1,现在改为2:@Database(entities = [Task::class], version = 2) // 版本号递增 abstract class TaskDatabase : RoomDatabase() { // 这里定义你的DAO接口,比如: // abstract fun taskDao(): TaskDao }第二步:保留现有构建配置
你已经使用了.fallbackToDestructiveMigration(),当版本号更新后,Room会自动删除旧的数据库文件并创建符合新架构的数据库,不会再触发完整性验证异常。如果需要保留旧数据,你需要自定义Migration类,但当前配置下破坏性迁移已经能快速解决问题。
内容的提问来源于stack exchange,提问作者Hari Joshi
相关产品推荐
相关产品推荐

