Как сделать миграцию БД в Room

«Как сделать миграцию БД в Room» — вопрос из категории Базы данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Миграция БД в Room выполняется через Migration объекты. При изменении схемы БД нужно:

  1. Увеличить версию БД в @Database(version = N)
  2. Создать объект Migration с указанием старой и новой версии
  3. Добавить миграцию в билдер Room

Пример:

val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE users ADD COLUMN last_login INTEGER")
    }
}

Room.databaseBuilder(...)
    .addMigrations(MIGRATION_1_2)
    .build()

Важно:

  • Для сложных изменений (переименование/удаление столбцов) используйте временную таблицу
  • Всегда тестируйте миграции
  • Используйте fallbackToDestructiveMigration() только для dev-версий