База данных номеров версий - PullRequest
       25

База данных номеров версий

0 голосов
/ 01 февраля 2019

Возможно, я не понимаю fallbackToDestructiveMigration()

Когда я изменяю номер версии своей комнаты, я хочу, чтобы она очистила мою таблицу и снова заполнилась, как это было при первом запуске.Но он не вызывает onCreate в моем обратном вызове, который вызывает мой метод заполнения.Вместо этого таблица только очищается.

О моей базе данных:

она использует живые данные.Пользователь никогда не сможет изменить БД.Идентификаторы вставляются в код вручную, поскольку они используются в качестве внешнего ключа для оперативной БД.

Есть ли способ для будущих миграций просто перестроить все это?

1 Ответ

0 голосов
/ 04 февраля 2019

Когда вы используете fallbackToDestructiveMigration(), ваш onCreate() не вызывается, так как ваша БД уже создана.

Но вы можете перестроить все заново, используя миграцию следующим образом:

Room.databaseBuilder(context, MyDatabase.class, DB_NAME)
.addMigrations(FROM_1_TO_2)
.build();

static final Migration FROM_1_TO_2 = new Migration(1, 2) {
    @Override
    public void migrate(final SupportSQLiteDatabase database) {
        database.execSQL("DELETE FROM `table_name`");    //this will empty table
        database.execSQL("YOUR_INSERTION_QUERY");    //insert in loop for multiple insertion
        }
    };

Используя приведенный выше код, вы всегда можете очистить и снова заполнить таблицу при обновлении версии БД.

...