Миграция базы данных комнаты Android выполняется несколько раз - PullRequest
1 голос
/ 01 ноября 2019

Я использую базу данных комнаты для создания локального хранилища, я пытаюсь перенести базу данных, и у меня возникает проблема, когда функция переноса вызывается несколько раз.

Я прилагаю свой фрагмент кода здесь.

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") напечатано несколько раз (дважды).

1 Ответ

0 голосов
/ 13 ноября 2019

Наконец-то получили решение, используя этот подход.

  if (DbInstance.getDbInstance(context.get()!!).openHelper.readableDatabase.version != Constants.DATABASE_VERSION) {
                        DbInstance.getDbInstance(context = context.get()!!)
                            .openHelper.readableDatabase.needUpgrade(Constants.DATABASE_VERSION)
                        DbInstance.getDbInstance(context = context.get()!!)
                            .openHelper.writableDatabase.needUpgrade(Constants.DATABASE_VERSION)
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...