1.使用的工具
國外程序員網(wǎng)站stackoverflow上面提供的MigrationHelper.java類做數(shù)據(jù)庫升級仅叫。
說明:該類有點小bug盖腕,后面會介紹解決方案。
2.原理說明
1.應(yīng)用程序啟動的時候承冰,根據(jù)需要升級的表創(chuàng)建新的臨時表
2.將需要更新表的數(shù)據(jù)遷移到臨時表中
3.刪除更新前的表咐扭,重命名臨時表
3.數(shù)據(jù)庫升級(以下內(nèi)容需要結(jié)合第一篇文章芭挽,greenDAO的使用詳解---(1)greenDAO的配置和增刪改查)
-
由于升級數(shù)據(jù)庫需要在DevOpenHelper類的onUpgrade()方法里面繼續(xù)滑废,因此我們需要自定義一個類繼承DevOpenHelper重寫onUpgrade()方法
注意:在onUpgrade()方法中可以不調(diào)用父類的onUpgrade()方法,因為做數(shù)據(jù)庫升級的時候已經(jīng)在MigrationHelper中調(diào)用了父類的onUpgrade()方法中的內(nèi)容
-
在初始化數(shù)據(jù)庫的時候用自定義的MyDevOpenHelper類替換原來的DevOpenHelper類
-
修改在項目根目錄build.gradle文件中配置的數(shù)據(jù)庫版本號(新版本號一定要比老版本大)
-
在onUpgrade()方法調(diào)用數(shù)據(jù)庫升級方法
migrate()方法說明:在我們保存數(shù)據(jù)庫的bean對象中览绿,有多少個bean對象的屬性字段發(fā)生改變策严,我們就在改方法中傳入改變的bean的Class
-
升級測試-在第一篇文章中創(chuàng)建的User類中新增加一個屬性字段,測試數(shù)據(jù)保存情況饿敲。
- 其他相關(guān)說明
如果我們沒有在onUpgrade()方法中調(diào)用數(shù)據(jù)庫升級方法妻导,而是直接調(diào)用父類onUpgrade()方法,用戶安裝我們的新版本應(yīng)用時候怀各,原來保存在數(shù)據(jù)庫中的數(shù)據(jù)都沒有倔韭,相當(dāng)于我們刪掉了原來的數(shù)據(jù)庫,創(chuàng)建一個新數(shù)據(jù)庫瓢对。
4.遺留問題(解決方案寿酌,請查看下一篇文章)
-
當(dāng)我們測試升級的是,在User中增加一個int屬性測試時硕蛹。就會以下錯誤: