GreenDao與Sqlite的數(shù)據(jù)庫版本升級策略

目錄.png


一.簡介

我們在開發(fā)應用的時候平窘,存儲數(shù)據(jù)可能會用到數(shù)據(jù)庫吓肋。第一個版本時所設計的數(shù)據(jù)庫結構,如果在以后的app版本中需要增加業(yè)務邏輯瑰艘,數(shù)據(jù)庫的表可能要做相應的修改是鬼,那么原來的數(shù)據(jù)庫結構就不能用了,這時就需要對數(shù)據(jù)庫進行升級紫新。

二.升級方案

1.讓用戶將應用卸載然后再安裝最新版本的app

2.對數(shù)據(jù)庫進行升級均蜜,對于第一種方案,用戶卸載老版本就會造成數(shù)據(jù)丟失弊琴,這樣對于用戶的體驗性極差兆龙,不到萬不得已的時候不要做杖爽。我們傾向于選擇第二項方案敲董。

三.不同版本升級分析

3.1.Version1.0

當我們開發(fā)第一個版本數(shù)據(jù)庫的時候,SQLiteOpenHelper的繼承類里會走onCreate()方法慰安,即 —->v1.0 走onCreate()腋寨,這時候并不涉及更新的方法。

3.2.Version2.0

當我們開發(fā)到第二個數(shù)據(jù)庫版本的時候化焕,分兩種情況:

(1) 用戶從1.0版本升級到2.0版本 SQLiteOpenHelper的繼承類里會走onUpgrade()方法,不走onCreate()方法萄窜。即v1.0—->v2.0 走onUpgrade();

(2) 如果是用戶直接安裝v2.0 撒桨, SQLiteOpenHelper的繼承類里會走onCreate()方法,不走onUpgrade()方法查刻。即 —->v2.0 走onCreate()

3.3.Version3.0

(1) 用戶從1.0版本升級到3.0版本 ,SQLiteOpenHelper的繼承類里會走onUpgrade()方法,不走onCreate()方法凤类。即v1.0—->v3.0 走onUpgrade()

(2) 用戶從2.0版本升級到3.0版本 穗泵,SQLiteOpenHelper的繼承類里會走onUpgrade()方法,不走onCreate()方法。即v2.0—->v3.0 走onUpgrade()

(3) 如果是用戶直接安裝3.0 谜疤,SQLiteOpenHelper的繼承類里會走onCreate()方法,不走onUpgrade()方法佃延。即 —->v3.0 走onCreate()

如下圖:


版本升級方法分析.png

只要是第一次安裝或者第一個數(shù)據(jù)庫版本的都走onCreate()方法现诀,而不走onUpgrade()方法,從低版本升級到高版本的都走onUpgrade()方法而不走onCreate()方法履肃。

四.代碼分析

4.1第一個數(shù)據(jù)庫版本

只走onCreate()仔沿,所以我們可以把創(chuàng)建表的方法寫在這個方法里。


另外需要注意的是尺棋,我們要把創(chuàng)建SQLiteOpenHelper子類的地方寫成單例模式封锉,這樣可以避免重復創(chuàng)建,出現(xiàn)問題膘螟。



此時的DataBaseConfig.DATABASE_NEW_VERSION 為1

點擊獲取低版本信息按鈕


數(shù)據(jù)庫版本1.png

如果以后的需求改變烘浦,需要往數(shù)據(jù)庫里加字段或者改字段,需要升級數(shù)據(jù)庫萍鲸。

4.2第二個數(shù)據(jù)庫版本

如果是從v1.0升級到v2.0闷叉,則走onUpgrade,如果是直接安裝v2.0,則走onCreate()

4.2.1. 比如從v1.0升級到v2.0 需要增加字段


此時 DataBaseConfig.DATABASE_NEW_VERSION 為2 脊阴,DataBaseConfig.DATABASE_FIRST_VERSION為1


數(shù)據(jù)庫版本2.png

版本2比版本1中新增了sex,和address字段握侧,比版本1多了兩項,由于代碼中默認的性別是女嘿期,所以前三個的性別是女品擎。

????? 注:還要再處理onCreate(),因為用戶可能是直接安裝V2.0

????? 有兩種方法:

(1)執(zhí)行舊版數(shù)據(jù)庫sql,則后面還要調(diào)用onUpgrade


(2)執(zhí)行新版數(shù)據(jù)庫sql,不需要調(diào)用onUpgrade


4.2.2. 第二個版本數(shù)據(jù)庫需要新增并修改字段

??????? 注:比如從v1.0升級到v2.0 需要增加字段

??????????? 新增sex,address字段备徐,修改age–>sign


此時 DataBaseConfig.DATABASE_NEW_VERSION 為2 萄传,DataBaseConfig.DATABASE_FIRST_VERSION為1


增加修改字段.png

從圖中可以看出,已經(jīng)將age選項修改為簽名sign了蜜猾,增加了sex,address兩個選項秀菱。

處理onCreate()方法同增加字段里的處理一致。

五.總結

本文總結了數(shù)據(jù)庫升級的相關內(nèi)容蹭睡,包括為什么要升級數(shù)據(jù)庫衍菱,怎么升級數(shù)據(jù)庫,新增字段和修改字段怎么處理肩豁,如有發(fā)現(xiàn)問題脊串,歡迎討論,共同學習清钥。

GreenDao數(shù)據(jù)庫升級

不斷版本迭代琼锋,一些數(shù)據(jù)庫中的結構也要發(fā)生改變、優(yōu)化祟昭,但如果貿(mào)然修改數(shù)據(jù)庫的版本號缕坎,只會把舊數(shù)據(jù)庫的數(shù)據(jù)刪除,再重新創(chuàng)建新表从橘,導致舊數(shù)據(jù)丟失念赶,這樣的做法明顯是不可取的础钠。于是我們需要數(shù)據(jù)庫的升級,也要保證舊數(shù)據(jù)保留叉谜。

新建MyDevOpenHelper旗吁,繼承DaoMaster.DevOpenHelper,重寫onUpgrade(Database db, int oldVersion, int newVersion)方法停局,在該方法中使用MigrationHelper進行數(shù)據(jù)庫升級以及數(shù)據(jù)遷移很钓。


新建MyDevOpenHelper

MigrationHelper由網(wǎng)上一位大神攥寫,鏈接:https://stackoverflow.com/questions/13373170/greendao-schema-update-and-data-migration/30334668#30334668董栽,有兩個版本码倦,后面一個適合GreenDao3.0版本,自行選用锭碳。


自定義MyDevOpenHelper獲取數(shù)據(jù)庫

注意:表中的數(shù)據(jù)類型是基礎數(shù)據(jù)類型的包裝類袁稽,用Long而不是long,否則會報錯擒抛。合并數(shù)據(jù)后推汽,舊數(shù)據(jù)表中沒有的字段值或賦null值。原來的參與數(shù)據(jù)庫的實體類需要重新生成構造方法和getter/setter歧沪。

build項目后歹撒,排除所有異常后,在build.gradle文件中配置的greedao中修改數(shù)據(jù)庫版本號诊胞,遞增1


更新數(shù)據(jù)庫版本號
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暖夭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撵孤,更是在濱河造成了極大的恐慌迈着,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件早直,死亡現(xiàn)場離奇詭異寥假,居然都是意外死亡市框,警方通過查閱死者的電腦和手機霞扬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枫振,“玉大人喻圃,你說我怎么就攤上這事》嗦耍” “怎么了斧拍?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長杖小。 經(jīng)常有香客問我肆汹,道長愚墓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任昂勉,我火速辦了婚禮浪册,結果婚禮上,老公的妹妹穿的比我還像新娘岗照。我一直安慰自己村象,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布攒至。 她就那樣靜靜地躺著厚者,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迫吐。 梳的紋絲不亂的頭發(fā)上库菲,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音志膀,去河邊找鬼蝙昙。 笑死,一個胖子當著我的面吹牛梧却,可吹牛的內(nèi)容都是我干的奇颠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼放航,長吁一口氣:“原來是場噩夢啊……” “哼烈拒!你這毒婦竟也來了?” 一聲冷哼從身側響起广鳍,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荆几,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赊时,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吨铸,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年祖秒,在試婚紗的時候發(fā)現(xiàn)自己被綠了诞吱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡竭缝,死狀恐怖房维,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抬纸,我是刑警寧澤咙俩,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站湿故,受9級特大地震影響阿趁,放射性物質(zhì)發(fā)生泄漏膜蛔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一脖阵、第九天 我趴在偏房一處隱蔽的房頂上張望飞几。 院中可真熱鬧,春花似錦独撇、人聲如沸屑墨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卵史。三九已至,卻和暖如春搜立,著一層夾襖步出監(jiān)牢的瞬間以躯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工啄踊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忧设,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓颠通,卻偏偏與公主長得像址晕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子顿锰,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354