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

Я разработал одно приложение для Android с использованием Kotlin, и оно доступно в PlayStore. Я использовал комнату базы данных для хранения значений. У меня есть следующие запросы:

  1. Схема базы данных теперь изменена. Как мне это сделать. Я упоминал учебник ниже, но все еще не ясно, как справиться с изменением схемы в Миграции. Визит https://developer.android.com/training/data-storage/room/migrating-db-versions.html

  2. Как я могу протестировать мое текущее приложение с PlayStore?

Заранее спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 06 июня 2019

Это довольно сложный вопрос, но в основном у вас есть 2 стратегии:

  • fallbackToDestructiveMigration -> прост в реализации, но ваши пользователи потеряют свои данные после обновления приложения
  • Укажите стратегию Migration (предпочтительно)

Случай 1 - fallbackToDestructiveMigration

При инициализации вашей базы данных просто вызовите fallbackToDestructiveMigration в своем построителе базы данных:

database = Room.databaseBuilder(context.getApplicationContext(),
                        UsersDatabase.class, "Sample.db")
                .fallbackToDestructiveMigration()
                .build();

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

Случай 2 - Интеллектуальная миграция

Предположим, у вас есть таблица с именем «Пользователи» и вы добавили столбец в эту таблицу в версии 2 вашей базы данных. Давайте назовем этот столбец «user_score». Вы должны реализовать интерфейс migrate класса Migration, чтобы обновить схему «Users version 1» до «Users version 2». Для этого вам понадобится alter table, вы можете написать его прямо внутри migrate метода:

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            // Your migration strategy here
            database.execSQL("ALTER TABLE Users ADD COLUMN user_score INTEGER")
        }
    };
database =  Room.databaseBuilder(context.getApplicationContext(),
        UsersDatabase.class, "Sample.db")
        .addMigrations(MIGRATION_1_2)
        .build();

Больше ссылок здесь:

1 голос
/ 07 июня 2019

На ваш вопрос 2 вы можете сделать следующее:

  1. Скачать и установить файл apk на мобильное устройство из playstore.

  2. Создайте свой файл apk (подписанный apk).Перед созданием файла apk не забудьте увеличить код версии.

  3. установить подписанный файл apk на устройстве, выполнив следующую команду adb

    adb install -r "apk_file_path"

Надеюсь, это сработает.

0 голосов
/ 06 июня 2019

Вы должны использовать VCS (например, git).Для каждой версии вашего приложения вы должны создать тег, чтобы вы могли легко переключаться между опубликованными версиями для проверки совместимости.

Саму миграцию можно выполнить, вызвав необработанные запросы к базе данных комнат в вашей миграции.Если вы не знаете, как их писать, вам следует сначала прочитать несколько учебных пособий по SQL.

...