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