0

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

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

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

有没有跳过模式验证?

4

1 回答 1

0

有没有跳过模式验证?

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

  • 您可以通过对实体进行更改、编译然后查看类的方法来轻松确定 Room 的模式预期,该方法是生成的 java 中带有后缀createAllTables的类的名称(Android Studio 中的 Android 视图)。@Database_Impl

这是一个使用回调的示例,您使用从生成的 java.util.s 复制的 SQL。

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

于 2021-12-16T19:02:43.780 回答