Таблица изменения переноса комнаты не добавляет новый столбец и переносит вызовы снова и снова

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

 void init() {
    db = Room.databaseBuilder(Global.getInstance(),
            AppDatabase.class, "feed").addMigrations(MIGRATION_1_2).build();
}

Миграционная недвижимость:

static final Migration MIGRATION_1_2 = new Migration(1,2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {


        database.execSQL("ALTER TABLE 'post' ADD COLUMN 'age' INTEGER NOT NULL DEFAULT 0");
        Log.d("VROM","Migration");
    }
};

Реализация базы данных:

@Database(entities = {Feed.class, DownloadModel.class}, version = 1) public abstract class AppDatabase extends RoomDatabase {
public abstract DaoAccess getFeedDao();}

Таким образом, после увеличения версии с 1 до 2 выполняется execSQL(), но новый столбец не добавляется в мою базу данных. Я вытащил свою базу данных из каталога приложений и несколько раз проверял, но столбца нет. Кроме того, если я убью свое приложение и снова запустил его, метод migrate вызывается снова, не знаю, является ли это предполагаемой функцией, но он нарушает функциональность для меня. Я думал, что migrate будет вызываться только один раз, так же, как onUpgrade()


person Gautam    schedule 11.10.2017    source источник


Ответы (2)


Убедитесь, что ваш столбец относится к классу модели. В вашем случае вы добавляете столбец age следующим образом: ADD COLUMN 'age' INTEGER, поэтому в вашем классе модели должно быть int age.

Кроме того, неплохо было бы написать тест миграции, чтобы точно знать, что именно не удается. Вы можете найти информацию о тесте миграции в документации по Android здесь: https://developer.android.com/topic/libraries/architecture/room.html#db-migration-testing

person Manish Kumar    schedule 11.10.2017
comment
Я принял ответ, но он частично решил мою проблему. Я обновлю свой ответ и добавлю, что именно для меня решено - person Gautam; 18.10.2017

Попробуйте изменить версию = 2 в AppDatabase внутри @Database.

person Raveesh G S    schedule 30.08.2019