【问题标题】:How to disable Android Room from managing the schema?如何禁用 Android Room 管理架构?
【发布时间】:2018-01-03 18:16:27
【问题描述】:

我是 Android Room 的新手。我想用它来读写我的 Sqlite 数据库。我不希望它管理架构(创建/迁移表)。

首先,我还没有完全在 Android Room 上出售,所以我不想通过让它管理我的架构来承诺它。

其次,我更喜欢完全控制架构。

我目前在启动应用程序时遇到了 Room 异常。我认为这是因为 Android Room 遇到了我现有的架构。

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.

如何阻止 Android Room 创建/迁移表?

【问题讨论】:

    标签: android android-room


    【解决方案1】:

    如果您更改数据库架构,例如无论是实体还是其他东西,您都必须在这里增加版本:

     @Database(entities = {Person.class, Product.class}, version = 2)
    

    就是这样。

    另一方面,如果此问题在开发模式下困扰您,只需卸载/安装应用程序,错误就会消失。或者只是从设置中清除应用的应用数据

    在其他情况下,您必须管理迁移。

    希望对您有所帮助。

    【讨论】:

    • 请检查问题。问题不在于版本号。问题是 Room 想要对模式进行版本化。我想管理自己的架构并禁止 Room 更改/检查架构。
    【解决方案2】:

    我认为您想停止自动生成数据库架构:

    @Database(entities = {Person.class, Product.class}, version = 2, exportSchema = false)
    

    exportSchema 将默认禁用自动生成架构。

    【讨论】:

    • 感谢您的提示。文档对 exportSchema 进行了说明:“您可以设置注释处理器参数 (room.schemaLocation) 来告诉 Room 将模式导出到文件夹中。”因此,该标志似乎会阻止生成模式文件,但不会阻止创建数据库表。
    • 我认为你想做的事情很复杂,你可以去实现你的 DAO 类并复制自动生成的源代码以获得最佳的 sqlite 请求功能。之后从你的删除 Room项目。
    • 注意:exportSchema 中的拼写错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多