【发布时间】:2018-04-05 09:08:36
【问题描述】:
这个错误让我摸不着头脑。到目前为止我找不到任何答案。我有旧数据库,我正在迁移到 Persistence Room 库。但是,每当我进行迁移时,都会出现以下错误,
java.lang.IllegalStateException: Migration didn't properly handle.
我使用的代码如下:
@Entity(tableName = ROUTE_TABLE)
public class RouteData {
static final String ROUTE_TABLE = "name";
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private int id;
@ColumnInfo(name = "col1")
private String col1;
//Other columns with exactly same as 'col1' just different names
//Getters and Setters
}
对于迁移,
Room.databaseBuilder(context.getApplicationContext(), MyData.class, DATABASE_NAME)
.addMigrations(MIGRATION_LATEST)
.fallbackToDestructiveMigration()
.build();
private static final Migration MIGRATION_LATEST = new Migration(9, 10) {
@Override
public void migrate(SupportSQLiteDatabase db) {
//Log.i("Tag" , "Migration Started");
//Migration logic
//Log.i("Tag" , "Migration Ended");
}
};
当我运行程序时。我在我的 LogCat 中收到“迁移结束”日志,但是当我再次尝试访问数据库时,它给了我以下错误。
Caused by: java.lang.IllegalStateException: Migration didn't properly handle xxx.
Expected:
TableInfo{name='name', columns={col1=Column{name='col1', type='TEXT', notNull=false, primaryKeyPosition=0}, ....}, foreignKeys=[]}
Found:
TableInfo{name='name', columns={col1=Column{name='col1', type='INTEGER', notNull=false, primaryKeyPosition=0}, ....}, foreignKeys=[]}
我不知道这个“INTEGER”从哪里来。我尝试卸载、使缓存无效和任何其他密切相关的解决方案。知道发生了什么吗?如果您新安装应用程序,它工作得非常好。错误仅在迁移后出现。根据我的日志猫,所有迁移步骤似乎都已完成,但仍显示迁移未正确处理。
【问题讨论】:
-
您可以在迁移之前添加您的模型吗?
-
@JoséCarlos,哪个型号?
-
你的 RouteData 类
-
@SnehPandya 感谢您对帮助我表现出兴趣。但是最近发现了真正的原因,请检查答案:)
-
@JoséCarlos 感谢您对帮助我的兴趣。但是最近发现了真正的原因,请检查答案:)
标签: android database-migration android-room