我正在通过从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属性无关。
java.lang.IllegalStateException:迁移未正确处理 posts(com.myapp.Database.PostModel)。
预期: TableInfo {name ='posts',columns = {imageWidth = Column {name ='imageWidth',type ='INTEGER', finity ='3',notNull = true,primaryKeyPosition = 0}, localVideoUrl = Column {name ='localVideoUrl',type ='TEXT',affinity ='2', notNull = false,primaryKeyPosition = 0}, authorImageLocalUrl = Column {name ='authorImageLocalUrl',type ='TEXT', finity ='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', finity ='2',notNull = false,primaryKeyPosition = 0}, authorImageUrl =列{名称='authorImageUrl',类型='TEXT', finity ='2',notNull = false,primaryKeyPosition = 0}, imageHeight = Column {name ='imageHeight',type ='INTEGER',affinity ='3', notNull = true,primaryKeyPosition = 0}},foreignKeys = [],索引= []}
发现: TableInfo {name ='posts',columns = {imageWidth = Column {name ='imageWidth',type ='INTEGER', finity ='3',notNull = true,primaryKeyPosition = 0}, authorImageLocalUrl = Column {name ='authorImageLocalUrl',type ='TEXT', finity ='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', finity ='2',notNull = false,primaryKeyPosition = 0}, authorImageUrl =列{名称='authorImageUrl',类型='TEXT', finity ='2',notNull = false,primaryKeyPosition = 0}, imageHeight = Column {name ='imageHeight',type ='INTEGER',affinity ='3', notNull = true,primaryKeyPosition = 0}},foreignKeys = [],索引= []}
答案 0 :(得分:3)
比较日志中的“期望”与“发现” JSON,显然会发生错误,因为找到的表没有要添加的3个新列:postType
,{{1} }和videoUrl
。 (You can use this script to compare both JSON objects from the log)
问题可能是在迁移代码中,您正在将新列添加到名为localVideoUrl
的表中,而根据日志,失败的表称为caption_table
。尝试调整您的迁移代码,以将新列添加到适当的表中。