Я обновляю свою базу данных с версии 3 до версии 4, выполняя переход с 3 на 4.
Вот мой код для миграции:
private static Migration MIGRATION_3_4 = new Migration(3, 4) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE caption_table ADD COLUMN localVideoUrl TEXT;");
database.execSQL("ALTER TABLE caption_table ADD COLUMN postType TEXT");
database.execSQL("ALTER TABLE caption_table ADD COLUMN videoUrl TEXT");
}
};
Вот код, который создает базу данных комнат
this.mAppDataBase = Room.databaseBuilder(getApplicationContext(), AppDataBase.class, "my_db")
.addMigrations(MIGRATION_2_3, MIGRATION_3_4)
.build();
Вот фрагмент кода, который я добавил в свою модель PostModel
@Expose
private String postType;
@Expose
private String videoUrl;
@Expose
private String localVideoUrl;
public String getPostType() {
return postType;
}
public void setPostType(String postType) {
this.postType = postType;
}
public String getVideoUrl() {
return videoUrl;
}
public void setVideoUrl(String videoUrl) {
this.videoUrl = videoUrl;
}
public String getLocalVideoUrl() {
return localVideoUrl;
}
public void setLocalVideoUrl(String localVideoUrl) {
this.localVideoUrl = localVideoUrl;
}
И ниже я получаю сообщение об ошибке. Ошибка не связана со свойством notNull объекта room.
java.lang.IllegalStateException: Migration didn't properly handle posts(com.myapp.Database.PostModel).
Expected: TableInfo{name='posts', columns = {imageWidth=Column{name='imageWidth', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}, localVideoUrl=Column{name='localVideoUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, authorImageLocalUrl=Column{name='authorImageLocalUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, videoUrl=Column{name='videoUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, imageLocalUrl=Column{name='imageLocalUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, postType=Column{name='postType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, authorName=Column{name='authorName', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, imageUrl=Column{name='imageUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1}, title=Column{name='title', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, authorImageUrl=Column{name='authorImageUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, imageHeight=Column{name='imageHeight', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}
Found: TableInfo{name='posts', columns = {imageWidth=Column{name='imageWidth', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}, authorImageLocalUrl=Column{name='authorImageLocalUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, imageLocalUrl=Column{name='imageLocalUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, authorName=Column{name='authorName', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, imageUrl=Column{name='imageUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1}, title=Column{name='title', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, authorImageUrl=Column{name='authorImageUrl', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, imageHeight=Column{name='imageHeight', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}
Ага! Я обновил версию комнаты, и, видимо, все заработало.
@RavindraBarthwal, ты проверил мой ответ? Странно, что это связано с версией комнаты, а не с фактическим кодом миграции.
Сравнивая ожидаемый и найденный JSON в вашем журнале, очевидно, что ошибка возникает из-за того, что в найденной таблице нет трех новых столбцов, которые вы намеревались добавить: postType
, videoUrl
и localVideoUrl
. (Вы можете использовать этот скрипт для сравнения обоих объектов JSON из журнала)
Проблема может заключаться в том, что в вашем коде миграции вы добавляете новые столбцы в таблицу с именем caption_table
, тогда как, согласно журналу, сбойная таблица называется posts
. Попробуйте изменить код миграции, чтобы добавить новые столбцы в нужную таблицу.
Вы в конце концов нашли решение?