亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

房間數據庫架構更新

房間數據庫架構更新

烙印99 2024-01-28 16:10:37
我的應用程序處于發布模式,我正在使用房間數據庫,我以前的數據庫版本是 2,并啟用了回退到破壞性遷移。@Database(entities = {        User.class,ApplicationSetting.class},        version = 2,        exportSchema = false)abstract public class DatabaseContext extends RoomDatabase {    private static final Object sLock = new Object();    private static DatabaseContext INSTANCE;    public static String DATABASE_NAME = AppConstants.DATABASE_NAME;    public static DatabaseContext getInstance(Context context) {        synchronized (sLock) {            if (INSTANCE == null) {                INSTANCE = Room.databaseBuilder(context.getApplicationContext(),                        DatabaseContext.class, DATABASE_NAME)                        .fallbackToDestructiveMigration()                        .build();            }            return INSTANCE;        }    }我在表中添加了一個新列并將版本更改為 3。現在我想提供從版本 2 到版本 3 的遷移,以便數據不會丟失。但我很困惑,因為在版本 2 中我啟用了回退破壞性遷移,現在在版本 3 中我想保留用戶數據并刪除回退破壞。我怎樣才能實現這個目標?
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

當使用fallbackToDestructiveMigration時,如果沒有定義的遷移,它只會銷毀(刪除表并重新創建它們),因此您可以添加2到3個遷移。

也就是說,如果提供了遷移,那么它就會被使用并繞過回退/破壞。

推薦的另一種選擇是使用fallbacktopressivemigrationfrom,這可用于定義要應用回退的特定缺失遷移。

例如你可以使用.fallbackToDestructiveMigrationFrom(1,7)

  • 1 允許破壞性從 1 到 2

  • 7 允許從 7 到 8 進行破壞性(添加只是為了表明可以提供多個啟動版本)

  • 其他的 2 到 3、3 到 4 等將需要遷移。

  • 請注意,這是更具體的,因此如果提供 1 到 2 或 7 到 8 的遷移,將會導致異常。

當使用fallbackToDestructiveMigration時,如果沒有定義的遷移,它只會銷毀(刪除表并重新創建它們),因此您可以添加2到3個遷移。

也就是說,如果提供了遷移,那么它就會被使用并繞過回退/破壞。

推薦的另一種選擇是使用fallbacktopressivemigrationfrom,這可用于定義要應用回退的特定缺失遷移。

例如你可以使用.fallbackToDestructiveMigrationFrom(1,7)

  • 1 允許破壞性從 1 到 2

  • 7 允許從 7 到 8 進行破壞性(添加只是為了表明可以提供多個啟動版本)

  • 其他的 2 到 3、3 到 4 等將需要遷移。

  • 請注意,這是更具體的,因此如果提供 1 到 2 或 7 到 8 的遷移,將會導致異常。


查看完整回答
反對 回復 2024-01-28
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號