解决:room无论如何怎么修改数据库版本都报错java.lang.IllegalStateException: Room cannot verify the data integrity

问题描述

这已经是第二次遇到这个bug了,第一次卡了一两天,这次卡了半天。
bug:

java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you’ve changed schema but forgot to update the version number.
You can simply fix this by increasing the version number

因为在开发了一半时需要用到预填充的数据库,但是把room database类的版本改来改去都还是错,最后改得很混乱了。

前提

  1. 用的是预填充数据库
  2. 并且根据报错修改了版本号依旧报错
  3. 开启了export schema
  4. 不要在已发布的app上使用此方法,可能导致app更新后数据库版本对不上源代码所写的数据库版本!
  5. 不要在已发布的app上使用此方法,可能导致app更新后数据库版本对不上源代码所写的数据库版本!
  6. 不要在已发布的app上使用此方法,可能导致app更新后数据库版本对不上源代码所写的数据库版本!

解决

  1. 确定数据库和代码的entity和view索引一致(字段名主键外键…)

  2. 确定database类的版本号与预填充的版本号一致
    在这里插入图片描述
    2.1 修改sqlite数据库的用户版本号(即上述的版本号)方法:
    进入预填充数据库的目录下,在sqlite3命令行中:
    查看用户版本号:

    pragma user_version;
    

    更改用户版本号:

    pragma user_version = 你的版本号;
    

    在这里插入图片描述

  3. 用adb命令将旧app卸载干净(其实这里有个坑,如果用ui而不是命令行去clear storage或者clear cache再卸载其实卸载不干净,即使在AndroidManifest.xml中设置了backup=false,耗了很长时间发现用得还是某个旧数据库)
    在这里插入图片描述

  4. 在Database类中添加下图划线方法 (这一步不知道是否必须,我在修复这个bug的时候是这么写的)在这里插入图片描述

  5. 在schema文件夹中的最新json文件复制划线部分的hash值
    在这里插入图片描述
    在这里插入图片描述
    将hash值覆盖到预填充的数据库中的room_master_table表的identity_hash列中

  6. 启动app,并运行一个读取或写入数据库的方法,查看数据库发现没有报错,而且预填充数据库的数据被拷贝进了app,读取到了预填充数据库的数据。大功告成!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你提到的问题是关于SpringBoot项目测试类报错java.lang.IllegalStateException: Failed to load ApplicationContext。这个错误通常表示Spring框架在尝试加载你的应用程序上下文时遇到了问题。这可能是由于多种原因导致的,下面是一些可能的解决方案: 1. **配置文件问题**:确保你的Spring Boot配置文件(如application.properties或application.yml)正确配置,并且没有语法错误。 2. **依赖问题**:确保你的项目依赖项都已正确添加,并且版本兼容。有时候,不同版本的Spring Boot或相关库之间可能存在兼容性问题。 3. **环境变量问题**:如果你使用了环境变量来配置某些属性,确保它们被正确设置。 4. **测试类配置问题**:如果你在测试类中使用了自定义配置,请确保这些配置是正确的,并且已经正确加载。 5. **循环依赖**:确保你的应用程序没有循环依赖问题。如果有,你需要重新设计你的应用程序结构以消除循环依赖。 6. **事务管理问题**:如果你在测试类中使用了事务管理,确保你正确地关闭了事务。你可以使用`@Transactional(noRollback = true)`注解来关闭事务。 7. **Bean创建失败**:有时候,Spring无法创建某些Bean可能会导致这个错误。检查你的Bean定义,确保它们没有语法错误,并且所有必需的依赖都已正确注入。 8. **测试环境配置问题**:如果你在测试类中使用了特定的配置(如数据库连接),请确保这些配置文件存在并且正确配置。 如果以上建议都不能解决你的问题,请提供更详细的错误信息或代码片段,这样我可以更准确地帮助你找到问题所在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值