[英]Why Room remove my database after migration
我想在數據庫中創建新表。 遷移應用程序刪除數據庫中的所有項目后。 為什么? 我沒有使用fallbackToDestructiveMigration()
我的代碼:
public class DatabaseClient {
private static DatabaseClient mInstance;
private DatabaseApp databaseApp;
private DatabaseClient(Context context) {
appDatabase = Room.databaseBuilder(context, DatabaseApp.class, "DB_NAME").build();
appDatabase = Room.databaseBuilder(context, DatabaseApp.class, "DB_NAME").addMigrations(MIGRATION_1_2).build();
}
public static synchronized DatabaseClient getInstance(Context mCtx) {
if (mInstance == null)
mInstance = new DatabaseClient(mCtx);
return mInstance;
}
public AppDatabase getAppDatabase() {
return appDatabase;
}
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(@NonNull final SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE `MarkRead` (`Id` INTEGER, `StudentId` TEXT," +
"`StudentName` TEXT, `MarkId` INTEGER,`Mark` TEXT, PRIMARY KEY(`Id`))");
}
};
}
我究竟做錯了什么?
這是因為您的舊數據尚未移動到新表中。
您必須執行以下步驟:
CREATE TABLE TEMP (... put your columns here)
通過編寫“SELECT *”查詢從現有表中獲取結果。
將上一個查詢的結果插入到 Temp 表中。
INSERT INTO TEMP SELECT .... FROM ORIGINAL
DROP TABLE ORIGINAL
ALTER TABLE TEMP RENAME TO ORIGINAL
現在您將擁有一個具有相同名稱和數據的新表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.