如何更改Room数据库的主键?

Ber*_*Koh 5 java database sqlite android android-room

更改主键需要我更新数据库版本。有没有办法使用 Room 中的迁移类将我的主键从一个字段更改为另一个字段?如果不是,我该如何更改我的主键?以下是我的一个片段Entity

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

    @NonNull
    @ColumnInfo(name = "city")
    private final String city;
Run Code Online (Sandbox Code Playgroud)

我想从 切换idcity

小智 -8

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;");
    }
};
Run Code Online (Sandbox Code Playgroud)

  • CHANGE 不是有效的 SQLite 命令。不知道为什么这是公认的答案。最好的方法是创建一个新表,将旧表中的数据复制到新表中,删除旧表,然后将新表重命名为旧表。 (2认同)