我正在使用Android房作为我的应用数据库。我需要将版本从1改为2,并将正确的.db嵌入到我的应用文件夹assets/databases/中。
我可以用addMigrations()指定迁移方法,也可以使用fallbackToDestructiveMigration()。
fallbackToDestructiveMigration()清空我的数据库,我不知道如何从我的文件夹assets/databases/中再次填充它。也许我可以在发生fallbackToDestructiveMigration时指定回调吗?
如果我添加了一个迁移方法,那么期望值和found之间有太多的差异,而且我也不知道如何将某些列设置为“NULL”。
预期: TableInfo{name='poi',columns={sound_path=Column{name=‘sound_path=Column_path’,type='TEXT',亲和力=‘2’,notNull=false,primaryKeyPosition=0},name_FR=Column{name='name_FR',type=‘TEXT’=‘2’,notNull=false,primaryKeyPosition=0},text_FR=Column{name='text_FR',type='TEXT',亲和力=‘2’,notNull=false,primaryKeyPosition=0},address=Column{name='address',type='TEXT',亲和力=‘2’,notNull=false,primaryKeyPosition=0},city=Column{name='city',类型=‘整型’,亲和=‘3’,notNull=true,primaryKeyPosition=0},text_EN=Column{name='text_EN',type='TEXT',亲和=‘2’,notNull=false,primaryKeyPosition=0},video_path=Column{名称=‘视频_路径’,类型=‘TEXT’,亲和力=‘2’,notNull=false,primaryKeyPosition=0},opening_hour=Column{name=‘opening_小时’,类型=‘TEXT’,亲和力=‘2’,notNull=false,primaryKeyPosition=0},img_360_paths=Column{name=‘img_360_path’,类型=‘TEXT’,亲和力=‘2’,notNull=false,primaryKeyPosition=0},open_schedule_EN=Column{name='open_schedule_EN',类型=‘TEXT’,亲和=‘2’,notNull=false,primaryKeyPosition=0},closed_days=Column{name=‘闭包_days’,类型=‘TEXT’,亲和=‘2’,notNull=false,primaryKeyPosition=0},open_schedule_FR=Column{name='open_schedule_FR',类型=‘TEXT’,亲和=‘2’,notNull=false,primaryKeyPosition=0},category_id=Column{名称=‘类别_id’,类型=‘整数’,亲和=‘3’,notNull=true,primaryKeyPosition=0},img_paths=Column{name=‘img_path’,类型=‘TEXT’,亲和=‘2’,notNull=false,primaryKeyPosition=0},closing_hour=Column{name=‘闭幕_小时’,类型=‘TEXT’,亲和=‘2’,notNull=false,primaryKeyPosition=0},price=Column{名称=‘价格’,类型=‘整数’,亲和力=‘3’,notNull=true,primaryKeyPosition=0},game_path=Column{name=‘closing_hour=Column_path’,类型=‘TEXT’,亲和力=‘2’,notNull=false,primaryKeyPosition=0},can_skip=Column{name='can_skip',类型=‘整数’,亲和力=‘3’,notNull=true,primaryKeyPosition=0},id=Column{name='id',类型=‘整型’,亲和=‘3’,notNull=true,primaryKeyPosition=1},closed_months=Column{名称=‘封闭_月’,类型=‘TEXT’,亲和=‘2’,notNull=false,primaryKeyPosition=0},vr_path=Column{名称=‘vr_path’,类型=‘TEXT’,亲和=‘2’,notNull=false,primaryKeyPosition=0},name_EN=Column{name='name_EN',type='TEXT',亲和=‘2’,notNull=false,primaryKeyPosition=0}},foreignKeys=[],indices=[]}发现: 08-09 17:27:47.990 22583-22583/com.rendrsoftworks.vrlib E/AndroidRuntime: TableInfo{name='poi',columns={sound_path=Column{name=‘声路径’,type=‘sound_path=Column’,亲和力=‘2’,notNull=false,primaryKeyPosition=0},name_FR=Column{name='name_FR',type='TEXT',primaryKeyPosition=0},name_FR=Column{name=‘name_FR’,type=‘TEXT_FR’,类型=‘TEXT’,name_FR=Column=‘2’,notNull=false,primaryKeyPosition=0},Address=Column{名称=‘地址’、类型=‘文本’、亲和力=‘2’、notNull=false、primaryKeyPosition=0}、city=Column{名称=‘城市’、类型=‘整数’、亲和力=‘3’、notNull=false、primaryKeyPosition=0}、text_EN=Column{名称=‘TEXT_EN’、类型=‘TEXT’、亲和力=‘2’、notNull=false、primaryKeyPosition=0}、video_path=Column{名称=‘视频_路径’、类型=‘TEXT’、text_EN=Column=‘2’、notNull=false、primaryKeyPosition=0}、opening_hour=Column{name='opening_hour‘、类型=’TEXT‘、亲缘=’2‘、notNull=false、primaryKeyPosition=0},open_schedule_EN=Column{name='open_schedule_EN',类型=“img_360_paths=Column=‘2’,notNull=false,primaryKeyPosition=0},closed_days=Column{名称=‘primaryKeyPosition=0_days’,类型=‘TEXT’,类型=‘TEXT’,primaryKeyPosition=0=‘2’,notNull=false,primaryKeyPosition=0},img_360_paths=Column类型=‘TEXT’,亲和力=‘2’,notNull=false,primaryKeyPosition=0},Category_id=Column{name=‘closing_id’,类型=‘整型’,亲和=‘3’,notNull=false,primaryKeyPosition=0},img_paths=Column{name=‘img_path’,type='TEXT',亲和=‘2’,notNull=false,primaryKeyPosition=0},closing_hour=Column{name=‘闭幕_小时’,类型=‘TEXT’,亲和=‘2’,notNull=false,primaryKeyPosition=0},price=Column{名称=‘价格’,类型=‘整数’,亲和力=‘3’,notNull=false,primaryKeyPosition=0},game_path=Column{name=‘游戏路径’,类型=‘文本’,亲和力=‘2’,notNull=false,primaryKeyPosition=0}、can_skip=Column{name='can_skip‘、类型=’整数‘、亲和力=’3‘、notNull=false、primaryKeyPosition=0}、id=Column{名称=’id‘、类型=’整数‘、亲和力=’3‘、notNull=false、primaryKeyPosition=1}、closed_months=Column{名称=’关闭_月份‘、类型=’TEXT‘、亲和力=’2‘、notNull=false、primaryKeyPosition=0}、vr_path=Column{名称=’vr_path‘、类型=’文本‘、亲和力=’2‘、notNull=false、primaryKeyPosition=0}、name_EN=Column{name='name_EN’、类型=‘TEXT’、亲和力=‘2’、notNull=false,primaryKeyPosition=0},foreignKeys=[],indices=[]}
发布于 2018-09-29 10:43:20
我也面临过同样的问题。您不必运行这些方法fallbackToDestructiveMigration()或addMigrations(),至少在上述情况下不必运行。只需使poi类与db表相同,并检查符号,例如,在错误消息中显示的poi表似乎有一个不同的字段,位于poi类"can_skip" notNull = true中,而在db表"can_skip" notNull = false中,您所要做的就是删除注释@NonNull,它应该如下所示
@ColumnInfo(name = "can_skip") // @NonNull remove this private int mCanSkip;。
在此之后,从仿真器或手机卸载应用程序,然后重新构建,它将正常工作。
助手:
RoomSQLiteDifferenceFinder:允许您确定db表及其类之间的差异。
用于SQLite的DB浏览器:允许您轻松地管理数据库。
https://stackoverflow.com/questions/51771434
复制相似问题