更新预打包数据库

update pre-packaged database

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

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

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

是否可以跳过架构验证?

Is there anyway to skip schema Validation ?

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

  • 您可以通过更改实体、编译然后查看 class 的 class 方法(即 class 的名称)轻松确定 Room 的模式期望在生成的 java(Android 在 Android Studio 中查看)中用 @Database 后缀 _Impl 注释。

这是一个 ,您可以在其中使用从生成的 java 复制的 SQL。

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