Android中數(shù)據(jù)庫升級onUpgrade方法說明
Andoird的SQLiteOpenHelper類中有一個onUpgrade方法。幫助文檔中只是說當數(shù)據(jù)庫升級時該方法被觸發(fā)。經(jīng)過實踐,解決了我一連串的疑問:
1. 幫助文檔里說的“數(shù)據(jù)庫升級”是指什么?
你開發(fā)了一個程序,當前是1.0版本。該程序用到了數(shù)據(jù)庫。到1.1版本時,你在數(shù)據(jù)庫的某個表中增加了一個字段。那么軟件1.0版本用的數(shù)據(jù)庫在軟件1.1版本就要被升級了。
2. 數(shù)據(jù)庫升級應該注意什么?
軟件的1.0版本升級到1.1版本時,老的數(shù)據(jù)不能丟。那么在1.1版本的程序中就要有地方能夠檢測出來新的軟件版本與老的數(shù)據(jù)庫不兼容,并且能夠 有辦法把1.0軟件的數(shù)據(jù)庫升級到1.1軟件能夠使用的數(shù)據(jù)庫。換句話說,要在1.0軟件的數(shù)據(jù)庫的那個表中增加那個字段,并賦予這個字段默認值。
3. 程序如何知道數(shù)據(jù)庫需要升級?
SQLiteOpenHelper類的構(gòu)造函數(shù)有一個參數(shù)是int version,它的意思就是指數(shù)據(jù)庫版本號。比如在軟件1.0版本中,我們使用SQLiteOpenHelper訪問數(shù)據(jù)庫時,該參數(shù)為1,那么數(shù)據(jù)庫版本號1就會寫在我們的數(shù)據(jù)庫中。
到了1.1版本,我們的數(shù)據(jù)庫需要發(fā)生變化,那么我們1.1版本的程序中就要使用一個大于1的整數(shù)來構(gòu)造SQLiteOpenHelper類,用于訪問新的數(shù)據(jù)庫,比如2。
當我們的1.1新程序讀取1.0版本的老數(shù)據(jù)庫時,就發(fā)現(xiàn)老數(shù)據(jù)庫里存儲的數(shù)據(jù)庫版本是1,而我們新程序訪問它時填的版本號為2,系統(tǒng)就知道數(shù)據(jù)庫需要升級。
4. 何時觸發(fā)數(shù)據(jù)庫升級?如何升級?
當系統(tǒng)在構(gòu)造SQLiteOpenHelper類的對象時,如果發(fā)現(xiàn)版本號不一樣,就會自動調(diào)用onUpgrade函數(shù),讓你在這里對數(shù)據(jù)庫進行升級。根據(jù)上述場景,在這個函數(shù)中把老版本數(shù)據(jù)庫的相應表中增加字段,并給每條記錄增加默認值即可。
新版本號和老版本號都會作為onUpgrade函數(shù)的參數(shù)傳進來,便于開發(fā)者知道數(shù)據(jù)庫應該從哪個版本升級到哪個版本。
升級完成后,數(shù)據(jù)庫會自動存儲最新的版本號為當前數(shù)據(jù)庫版本號。
posted on 2014-09-28 10:44 順其自然EVO 閱讀(1891) 評論(0) 編輯 收藏 所屬分類: android