簡體   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