繁体   English   中英

使用 Alter Table 的房间数据库迁移问题

[英]Room Database Migration Issue with Alter Table

我第一次不得不更改我的数据库,在阅读了一些教程之后,这似乎很简单。 但是,尽管我提供了迁移,但我仍然收到以下错误:“需要从 1 迁移到 2,但未找到。请通过 RoomDatabase.Builder.addMigration(Migration...) 提供必要的迁移路径或允许通过 RoomDatabase.Builder.fallbackToDestructiveMigration* 方法之一进行破坏性迁移。”

版本递增,使用更改代码进行迁移,调用 addMigration。 我以为我已经正确地完成了每一件事情,但有些事情仍然无法正常工作。

AppDatabase.java

@Database(entities = {OwnedCards.class, WantedCards.class}, version = 2, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {

public abstract OwnedDao ownedDao();
public abstract WantedDao wantedDao();

private static AppDatabase INSTANCE;

public static AppDatabase getDbInstance(Context context) {

    if(INSTANCE == null) {
        INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "my_DB")
                .addMigrations(MIGRATION_1_2)
                .allowMainThreadQueries()
                .build();

    }
    return INSTANCE;
}

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        // Your migration strategy here
        database.execSQL("ALTER TABLE 'owned_cards' ADD COLUMN 'ownedNewQty' INTEGER NOT NULL DEFAULT 0");
    }
};
}

OwnedCards.java

@Entity(tableName = "owned_cards")
public class OwnedCards {

@PrimaryKey(autoGenerate = false)
@NonNull
public String number;

@ColumnInfo(name = "ownedNewQty")
public Integer ownedNewQty;
}

任何指导表示赞赏。

看起来你可能有一些不好的 SQL。 确保您的 SQL 语法正确且没有错误。 看起来execSQL()失败,导致迁移失败。

您应该使用反引号而不是单引号。

ALTER TABLE
  `owned_cards`
ADD
  COLUMN `ownedNewQty` INTEGER NOT NULL DEFAULT 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM