我正在使用房间数据库创建本地存储,我正在尝试迁移数据库,但在多次调用迁移函数时遇到问题。
我在这里附上我的代码。
class DbInstance {
companion object {
private var db: AppDatabase? = null
fun getDbInstance(context: Context): AppDatabase {
if (db == null)
db = Room.databaseBuilder(
context,
AppDatabase::class.java, "mydb"
)
.addMigrations(MIGRATION_1_2, MIGRATION_2_3)
.build()
return db!!
}
private val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
}
}
private val MIGRATION_2_3 = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
println("------> called for MIGRATION_2_3")
database.execSQL(
"Alter table PaymentDB add column ui_name text"
)
}
}
}
}
@Database(entities = arrayOf(PaymentDB::class), version = 3)
@TypeConverters(DbTypeConverter::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun paymentDao(): PaymentDao
}
其中println("------> called for MIGRATION_2_3")
打印了多次(两次)。
2条答案
按热度按时间nbnkbykc1#
最后利用该方法得到了解决方案。
7gyucuyw2#
**我遇到这个问题是因为我使用了数据库的多个示例。**如果可能,您应该坚持使用单个示例来避免这个问题。在我的情况下,我需要小部件和通知的单独示例,因为它们在与主应用不同的应用上下文中运行,这很复杂,而且使用单独的数据库是最简单的解决方案。
每次迁移前运行的Kotlin扩展:
用法: