Миграция базы данных помещений: методы и примеры кода

Миграция базы данных помещений — это процесс изменения схемы базы данных с течением времени при сохранении существующих данных. В контексте разработки Android Room – это популярная библиотека, которая обеспечивает уровень абстракции поверх SQLite, упрощая работу с базами данных.

Вот несколько методов миграции базы данных Room, а также примеры кода:

  1. Использование метода fallbackToDestructiveMigration:

    Room.databaseBuilder(context, AppDatabase.class, "my-database")
    .fallbackToDestructiveMigration()
    .build();

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

  2. Использование метода addMigrations:

    Room.databaseBuilder(context, AppDatabase.class, "my-database")
    .addMigrations(MIGRATION_1_2, MIGRATION_2_3)
    .build();

    При этом подходе вы определяете классы миграции, которые расширяют Migration, и указывают необходимые изменения между различными версиями базы данных. Вот пример класса миграции:

    static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        database.execSQL("ALTER TABLE my_table ADD COLUMN new_column TEXT");
    }
    };

    Эта миграция добавляет новый столбец в существующую таблицу.

  3. Использование RoomDatabase.Callback:

    Room.databaseBuilder(context, AppDatabase.class, "my-database")
    .addCallback(new RoomDatabase.Callback() {
        @Override
        public void onCreate(SupportSQLiteDatabase db) {
            // Handle initial database creation
        }
        @Override
        public void onMigrate(SupportSQLiteDatabase db, int oldVersion, int newVersion) {
            // Handle migration from oldVersion to newVersion
        }
    })
    .build();

    При таком подходе вы можете переопределить методы onCreateи onMigrateRoomDatabase.Callbackдля управления созданием и миграцией базы данных соответственно.