【问题标题】:update pre-packaged database更新预打包的数据库
【发布时间】:2021-12-16 12:34:57
【问题描述】:

我从服务器下载了一个 SQLite 文件,其中包含整个应用程序的所有静态数据。我用它来填充房间数据库。

使用 Room 2.1.0,我曾经将文件复制到数据库目录,并且在使用旧实体的版本上更新 SQLite 文件架构(添加新列)时它工作正常。

现在使用 Room 2.4.0,如果 SQLite 文件架构发生更改,则会引发异常
IllegalStateException("Pre-packaged database has an invalid schema:")

有没有跳过模式验证?

【问题讨论】:

    标签: android android-room android-room-prepackageddatabase


    【解决方案1】:

    有没有跳过模式验证?

    没有。预打包数据库中的架构必须满足 Room 从实体构建的架构的预期,或者您可以使用 prePackagedDatabaseCallback 修改复制的预打包数据库以满足预期。

    • 您可以通过对实体进行更改、编译然后查看类的 createAllTables 方法来轻松确定 Room 的架构预期,该类的名称是用 @Database 注释的类的名称,后缀为 _Impl在生成的 java 中(Android Studio 中的 Android View)。

    这是一个example of using the callback,您使用从生成的 java 复制的 SQL。

    但是,建议始终使用您使用的任何工具更改预打包的数据库,以根据生成的 java 匹配架构,而不是使用回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 2021-05-10
      • 2021-12-13
      • 2011-05-10
      相关资源
      最近更新 更多