如何抑制 Room 数据库架构更改错误?
How do I supress a Room database schema change error?
我只是在摆弄我的架构,自从我更改了 schema/Entity class.
之后我根本无法加载我的应用程序
我已经删除了测试设备上的应用程序,清除了 AndroidStudio 上的缓存,并重新启动了我的机器,但错误仍然存在。我所做的只是为我的 Room 数据库更改我的一个实体数据 classes 的默认值。
如何在不增加版本号和提供迁移路径的情况下强制 AndroidStudio 忘记旧的 table schema/Entity class?
错误:
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 Studio 不保存数据库架构信息,您的应用会保存。因此,您可以清除测试设备上的应用数据,并在不增加版本号的情况下解决问题。
但是,如果不清除应用程序数据,您可以使用 RoomDatabase.Builder.fallbackToDestructiveMigration()
并增加版本号以避免执行迁移逻辑,如果您愿意丢失以前数据库的内容的话。
您可以尝试在清单文件中将 android:allowBackup 设置为 false。
您可以通过两种方式解决此问题。
通过在 databaseBuilder
中调用 fallbackToDestructiveMigration()
允许破坏性迁移。
Room.databaseBuilder(context, AppDatabase::class.java, DB_NAME)
.fallbackToDestructiveMigration()
.build()
请注意,如果您使用此方法,您将丢失所有数据。
- 为避免丢失应用中的数据,您必须编写一些 SQL。不过,在我们开始之前,让我们看看如何向 Room 数据库添加迁移。
假设我们有一个模式版本 1,我们将其增加到 2。那么我们的迁移将这样写:
// Create a static val
val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
// database.execSQL(...)
}
}
// Add the migration to your database builder
Room.databaseBuilder(context, AppDatabase::class.java, DB_NAME)
.addMigrations(MIGRATION_1_2)
.build()
我只是在摆弄我的架构,自从我更改了 schema/Entity class.
之后我根本无法加载我的应用程序我已经删除了测试设备上的应用程序,清除了 AndroidStudio 上的缓存,并重新启动了我的机器,但错误仍然存在。我所做的只是为我的 Room 数据库更改我的一个实体数据 classes 的默认值。
如何在不增加版本号和提供迁移路径的情况下强制 AndroidStudio 忘记旧的 table schema/Entity class?
错误:
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 Studio 不保存数据库架构信息,您的应用会保存。因此,您可以清除测试设备上的应用数据,并在不增加版本号的情况下解决问题。
但是,如果不清除应用程序数据,您可以使用 RoomDatabase.Builder.fallbackToDestructiveMigration()
并增加版本号以避免执行迁移逻辑,如果您愿意丢失以前数据库的内容的话。
您可以尝试在清单文件中将 android:allowBackup 设置为 false。
您可以通过两种方式解决此问题。
通过在
databaseBuilder
中调用fallbackToDestructiveMigration()
允许破坏性迁移。Room.databaseBuilder(context, AppDatabase::class.java, DB_NAME) .fallbackToDestructiveMigration() .build()
请注意,如果您使用此方法,您将丢失所有数据。
- 为避免丢失应用中的数据,您必须编写一些 SQL。不过,在我们开始之前,让我们看看如何向 Room 数据库添加迁移。
假设我们有一个模式版本 1,我们将其增加到 2。那么我们的迁移将这样写:
// Create a static val
val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
// database.execSQL(...)
}
}
// Add the migration to your database builder
Room.databaseBuilder(context, AppDatabase::class.java, DB_NAME)
.addMigrations(MIGRATION_1_2)
.build()