Что нужно сделать чтобы все работало если изменю поле с int на string в Room

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

Ответ

Для изменения типа поля с int на String в Room, нужно выполнить несколько шагов:

  1. Изменить тип поля в сущности:
// Было: 
@ColumnInfo(name = "age") val age: Int

// Стало:
@ColumnInfo(name = "age") val age: String
  1. Создать миграцию в классе базы данных:
val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE your_table ADD COLUMN age_temp TEXT")
        database.execSQL("UPDATE your_table SET age_temp = CAST(age AS TEXT)")
        database.execSQL("ALTER TABLE your_table DROP COLUMN age")
        database.execSQL("ALTER TABLE your_table RENAME COLUMN age_temp TO age")
    }
}
  1. Добавить миграцию при создании БД:
Room.databaseBuilder(...)
    .addMigrations(MIGRATION_1_2)
    .build()

Важно: миграция не поддерживает прямое изменение типа колонки, поэтому используется временная колонка. Также убедитесь, что данные можно корректно преобразовать из int в String.