Andoird的SQLiteOpenHelper類中有一個onUpgrade方法。協助文檔中只是說當資料庫升級時該方法被觸發。經過實踐,解決了我一連串的疑問:
1. 協助文檔裡說的“資料庫升級”是指什嗎?
你開發了一個程式,當前是1.0版本。該程式用到了資料庫。到1.1版本時,你在資料庫的某個表中增加了一個欄位。那麼軟體1.0版本用的資料庫在軟體1.1版本就要被升級了。
2. 資料庫升級應該注意什嗎?
軟體的1.0版本升級到1.1版本時,老的資料不能丟。那麼在1.1版本的程式中就要有地方能夠檢測出來新的軟體版本與老的資料庫不相容,並且能夠有辦法把1.0軟體的資料庫升級到1.1軟體能夠使用的資料庫。換句話說,要在1.0軟體的資料庫的那個表中增加那個欄位,並賦予這個欄位預設值。
3. 程式如何知道資料庫需要升級?
SQLiteOpenHelper類的建構函式有一個參數是int version,它的意思就是指資料庫版本號碼。比如在軟體1.0版本中,我們使用SQLiteOpenHelper訪問資料庫時,該參數為1,那麼資料庫版本號碼1就會寫在我們的資料庫中。
到了1.1版本,我們的資料庫需要發生變化,那麼我們1.1版本的程式中就要使用一個大於1的整數來構造SQLiteOpenHelper類,用於訪問新的資料庫,比如2。
當我們的1.1新程式讀取1.0版本的老資料庫時,就發現老資料庫裡儲存的資料庫版本是1,而我們新程式訪問它時填的版本號碼為2,系統就知道資料庫需要升級。
4. 何時觸發資料庫升級?如何升級?
當系統在構造SQLiteOpenHelper類的對象時,如果發現版本號碼不一樣,就會自動調用onUpgrade函數,讓你在這裡對資料庫進行升級。根據上述情境,在這個函數中把老版本資料庫的相應表中增加欄位,並給每條記錄增加預設值即可。
新版本號碼和老版本號碼都會作為onUpgrade函數的參數傳進來,便於開發人員知道資料庫應該從哪個版本升級到哪個版本。
升級完成後,資料庫會自動儲存最新的版本號碼為當前資料庫版本號碼。