Обновление схемы базы данных комнат - PullRequest
2 голосов
/ 01 ноября 2019

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

@Database(entities = {
        User.class,ApplicationSetting.class},
        version = 2,
        exportSchema = false)
abstract public class DatabaseContext extends RoomDatabase {

    private static final Object sLock = new Object();
    private static DatabaseContext INSTANCE;
    public static String DATABASE_NAME = AppConstants.DATABASE_NAME;

    public static DatabaseContext getInstance(Context context) {
        synchronized (sLock) {
            if (INSTANCE == null) {
                INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                        DatabaseContext.class, DATABASE_NAME)
                        .fallbackToDestructiveMigration()
                        .build();
            }
            return INSTANCE;
        }
    }

Я добавил новый столбец в таблицу и изменил версию на3. Теперь я хочу обеспечить переход с версии 2 на версию 3, чтобы данные не терялись. Но я сбит с толку, потому что в версии 2 я включил аварийную деструктивную миграцию, а теперь в версии 3 я хочу сохранить пользовательские данные и удалить аварийное уничтожение.

Как мне этого добиться?

1 Ответ

2 голосов
/ 01 ноября 2019

При использовании fallbackToDestructiveMigration он уничтожает (удаляет таблицы и создает их заново) только в том случае, если для миграции не определена миграция, поэтому вы можете добавить миграцию 2-3.

То есть, если предусмотрена Миграция, то она используется и обходит резерв / уничтожение.

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

например, вы можете использовать .fallbackToDestructiveMigrationFrom(1,7)

  • 1, чтобы разрешить разрушительные от 1 до 2
  • 7, чтобы разрешить деструктивное значение от 7 до 8 (добавлено только для того, чтобы показать, что могут быть предоставлены несколько стартовых версий)
  • других от 2 до 3, 3 до 4 и т. Дa Миграция.
  • Обратите внимание, что это более конкретно, поэтому, если предусмотрена Миграция от 1 до 2 или от 7 до 8, будет исключение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...