当前位置: 首页 > 知识库问答 >
问题:

Room数据库迁移失败:更改表以添加多列

劳灵均
2023-03-14

通过提供从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();
@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;
}

找到:TableInfo{name='posts',Columns={imageWidth=Column{name='image widt',Type='integer',affinity='3',notnull=true,PrimaryKeyPosition=0},authorImageLocalURL=Column{name='author ImageLocalURL',Type='text',affinity='2',notnull=false,PrimaryKeyPosition=0},imageLocalURL=Column{name='image LocalURL',Type='text',affinity='2',notnull=false,PrimaryKeyPosition=0},,affinity='2',notnull=false,primarykeyposition=0},imageurl=column{name='image url',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='author 2',NotNull=False,PrimaryKeyPosition=0},ImageHeight=Column{Name='Image Height',Type='Integer',Affinity='3',NotNull=True,PrimaryKeyPosition=0}},ForeignKeys=[],Indices=[]}

共有1个答案

公西俊民
2023-03-14

将日志中的预期JSON与找到的JSON进行比较,很明显,发生错误是因为找到的表没有您想要添加的3个新列:PostTypeVideOURLLocalVideOURL。(您可以使用此脚本从日志中比较两个JSON对象)

问题可能是在迁移代码中将新列添加到名为caption_table的表中,而根据日志,失败的表称为posts。尝试调整迁移代码以将新列添加到适当的表中。

 类似资料:
  • 然而,我发现手动操作很不方便。有没有办法告诉Room:我不会接触任何现有的表,所以数据是安全的。请为我创建迁移?

  • 我需要在我的laravel项目中添加一个新列,这没有问题,我使用了进行了更新,一切正常。现在我需要找出这个表上有多少条记录,并用一些值进行更新。 我有表: 因此,我使用新的迁移文件创建了新字段: 现在我需要用一些值更新表中的这个字段,例如,如果表中有100条记录,那么我需要在每一行中插入值“carry-X”,其中X是一个从1到100的数字。例如: 逮捕令-1,逮捕令-2,......逮捕证-100

  • 预期: 找到TableInfo{name='user',Columns={name=Column{name='name',Type='text',NotNull=False,PrimaryKeyPosition=0},Age=Column{name='Age',Type='integer',NotNull=True,PrimaryKeyPosition=0},ID=Column{name='id'

  • 我有致命的异常:java.lang.RuntimeException:计算数据库实时数据时出现异常。在崩溃报告中 为什么TableInfo中的所有内容都是空的 谁能帮我一下,我真的不知道我做错了什么或者是不是一个bug。

  • 本文向大家介绍Django 将更改应用到数据库(迁移),包括了Django 将更改应用到数据库(迁移)的使用技巧和注意事项,需要的朋友参考一下 示例 创建新模型或修改现有模型后,您将需要为更改生成迁移,然后将迁移应用于指定的数据库。这可以通过使用Django的内置迁移系统来完成。manage.py在项目根目录中使用实用程序: 上面的命令将在migrations应用程序的子目录下创建必需的迁移脚本。

  • 我在Laravel4.2项目中工作,现在我想在现有的表用户中添加列。现在我想添加另一列,当我运行migration命令时,我总是收到相同的消息“无需迁移”下面是我的迁移模式代码 我在终点站跑步 我还运行以下命令 但是当我运行上面的命令时,我收到以下错误 SQLSTATE[42S01]:基表或视图已经存在: 1050表'用户'已经存在