Kotlin 无法在文件室数据库中执行迁移
我尝试迁移数据库,但它总是说需要从3迁移到2,但找不到。我已经检查了数据库,我添加的列就在那里。我迷路了。我遵循了几个教程,但似乎不起作用。我也尝试过使用Fallback来破坏迁移(),但它也不起作用。有什么我错过的步骤吗Kotlin 无法在文件室数据库中执行迁移,kotlin,android-room,Kotlin,Android Room,我尝试迁移数据库,但它总是说需要从3迁移到2,但找不到。我已经检查了数据库,我添加的列就在那里。我迷路了。我遵循了几个教程,但似乎不起作用。我也尝试过使用Fallback来破坏迁移(),但它也不起作用。有什么我错过的步骤吗 @Database(entities = [User::class], version = 2, exportSchema = false) @TypeConverters(dateConverter::class) abstract class UserDatabase:
@Database(entities = [User::class], version = 2, exportSchema = false)
@TypeConverters(dateConverter::class)
abstract class UserDatabase: RoomDatabase() {
abstract fun userDao(): UserDao
companion object{
@Volatile
private var INSTANCE: UserDatabase? = null
val migration_1_2: Migration = object: Migration(1,2){
override fun migrate(database: SupportSQLiteDatabase){
}
}
fun getDatabase(context: Context): UserDatabase{
val tempInstance = INSTANCE
if(tempInstance != null){
return tempInstance
}
synchronized(this){
val instance = Room.databaseBuilder(
context.applicationContext,
UserDatabase::class.java,
"user_database"
).addMigrations(migration_1_2)
.build()
INSTANCE = instance
return instance
}
}
}
}
错误日志
2021-05-25 10:50:22.802 26100-26339/com.example.mybudgetingapp E/AndroidRuntime: FATAL EXCEPTION: arch_disk_io_0
Process: com.example.mybudgetingapp, PID: 26100
java.lang.RuntimeException: Exception while computing database live data.
at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:92)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.IllegalStateException: A migration from 3 to 2 was required but not found. Please provide the necessary Migration path via RoomDatabase.Builder.addMigration(Migration ...) or allow for destructive migrations via one of the RoomDatabase.Builder.fallbackToDestructiveMigration* methods.
at androidx.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:117)
at androidx.room.RoomOpenHelper.onDowngrade(RoomOpenHelper.java:129)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onDowngrade(FrameworkSQLiteOpenHelper.java:135)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:414)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:316)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:92)
at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:53)
at androidx.room.RoomDatabase.inTransaction(RoomDatabase.java:476)
at androidx.room.RoomDatabase.assertNotSuspendingTransaction(RoomDatabase.java:281)
at androidx.room.RoomDatabase.query(RoomDatabase.java:324)
at androidx.room.util.DBUtil.query(DBUtil.java:83)
at com.example.mybudgetingapp.data.UserDao_Impl$9.call(UserDao_Impl.java:200)
at com.example.mybudgetingapp.data.UserDao_Impl$9.call(UserDao_Impl.java:197)
at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:90)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)