【问题标题】:How to change primary key of Room database?如何更改 Room 数据库的主键?
【发布时间】:2018-02-01 10:14:13
【问题描述】:

更改我的主键需要我更新我的数据库版本。有什么方法可以使用 Room 中的 Migration 类将我的主键从一个字段更改为另一个字段?如果不是我如何更改我的主键?以下是我Entity的sn-p。

@Entity(tableName = "weather")
public class Weather {
    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "id")
    private final String id;

    @NonNull
    @ColumnInfo(name = "city")
    private final String city;

我想从id 切换到city

【问题讨论】:

  • 提示:Room 假定您的实体/pojo 的属性名称是您希望使用的列名称。 ColumnInfo 注释中的名称值的目的是为该属性设置一个不同的列名。

标签: java android database sqlite android-room


【解决方案1】:
Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
        .addMigrations(MIGRATION_1_2).build();

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        database.execSQL("ALTER TABLE weather CHANGE id city VARCHAR(22) NOT NULL;");
    }
};

【讨论】:

  • 连sql语句都不行。
  • CHANGE 不是有效的 SQLite 命令。不知道为什么这是公认的答案。最好的方法是创建一个新表,将旧表中的数据复制到新的新表中,删除旧表,然后将新表重命名为旧表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
相关资源
最近更新 更多