我从服务器下载了一个 SQLite 文件,其中包含应用程序周围的所有静态数据。我用它来填充房间数据库。
使用 Room 2.1.0,我曾经将文件复制到数据库目录,并且在使用旧实体的版本上更新 SQLite 文件模式(添加新列)时它工作正常。
现在使用 Room 2.4.0,如果 SQLite 文件架构发生更改,则会抛出异常
IllegalStateException("Pre-packaged database has an invalid schema:")。
有没有跳过模式验证?
我从服务器下载了一个 SQLite 文件,其中包含应用程序周围的所有静态数据。我用它来填充房间数据库。
使用 Room 2.1.0,我曾经将文件复制到数据库目录,并且在使用旧实体的版本上更新 SQLite 文件模式(添加新列)时它工作正常。
现在使用 Room 2.4.0,如果 SQLite 文件架构发生更改,则会抛出异常
IllegalStateException("Pre-packaged database has an invalid schema:")。
有没有跳过模式验证?
有没有跳过模式验证?
不可以。预打包数据库中的架构必须满足 Room 从实体构建的架构的预期,或者您可以使用prePackagedDatabaseCallback修改复制的预打包数据库以满足预期。
createAllTables的类的名称(Android Studio 中的 Android 视图)。@Database_Impl这是一个使用回调的示例,您使用从生成的 java.util.s 复制的 SQL。
但是,建议始终使用您使用的任何工具来更改预打包的数据库,以根据生成的 java 匹配架构,而不是使用回调。