greenDAO的使用詳解---(2)greenDAO3.2.2數(shù)據(jù)庫(kù)的升級(jí)

1.使用的工具

國(guó)外程序員網(wǎng)站stackoverflow上面提供的MigrationHelper.java類(lèi)做數(shù)據(jù)庫(kù)升級(jí)。
說(shuō)明:該類(lèi)有點(diǎn)小bug,后面會(huì)介紹解決方案。

2.原理說(shuō)明

1.應(yīng)用程序啟動(dòng)的時(shí)候,根據(jù)需要升級(jí)的表創(chuàng)建新的臨時(shí)表
2.將需要更新表的數(shù)據(jù)遷移到臨時(shí)表中
3.刪除更新前的表,重命名臨時(shí)表

3.數(shù)據(jù)庫(kù)升級(jí)(以下內(nèi)容需要結(jié)合第一篇文章,greenDAO的使用詳解---(1)greenDAO的配置和增刪改查)

  1. 由于升級(jí)數(shù)據(jù)庫(kù)需要在DevOpenHelper類(lèi)的onUpgrade()方法里面繼續(xù),因此我們需要自定義一個(gè)類(lèi)繼承DevOpenHelper重寫(xiě)onUpgrade()方法


    image

    注意:在onUpgrade()方法中可以不調(diào)用父類(lèi)的onUpgrade()方法,因?yàn)樽鰯?shù)據(jù)庫(kù)升級(jí)的時(shí)候已經(jīng)在MigrationHelper中調(diào)用了父類(lèi)的onUpgrade()方法中的內(nèi)容

  2. 在初始化數(shù)據(jù)庫(kù)的時(shí)候用自定義的MyDevOpenHelper類(lèi)替換原來(lái)的DevOpenHelper類(lèi)


    image
  3. 修改在項(xiàng)目根目錄build.gradle文件中配置的數(shù)據(jù)庫(kù)版本號(hào)(新版本號(hào)一定要比老版本大)


    image
  4. 在onUpgrade()方法調(diào)用數(shù)據(jù)庫(kù)升級(jí)方法


    image

    migrate()方法說(shuō)明:在我們保存數(shù)據(jù)庫(kù)的bean對(duì)象中,有多少個(gè)bean對(duì)象的屬性字段發(fā)生改變,我們就在改方法中傳入改變的bean的Class

  5. 升級(jí)測(cè)試-在第一篇文章中創(chuàng)建的User類(lèi)中新增加一個(gè)屬性字段,測(cè)試數(shù)據(jù)保存情況。


    image
  6. 其他相關(guān)說(shuō)明
    如果我們沒(méi)有在onUpgrade()方法中調(diào)用數(shù)據(jù)庫(kù)升級(jí)方法,而是直接調(diào)用父類(lèi)onUpgrade()方法,用戶(hù)安裝我們的新版本應(yīng)用時(shí)候,原來(lái)保存在數(shù)據(jù)庫(kù)中的數(shù)據(jù)都沒(méi)有,相當(dāng)于我們刪掉了原來(lái)的數(shù)據(jù)庫(kù),創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù)。

4.遺留問(wèn)題(解決方案,請(qǐng)查看下一篇文章)

  1. 當(dāng)我們測(cè)試升級(jí)的是,在User中增加一個(gè)int屬性測(cè)試時(shí)。就會(huì)以下錯(cuò)誤:


    image

5.代碼下載地址

源碼下載,請(qǐng)點(diǎn)擊這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容