[英]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.