在Android中afinal架構下實現sqlite數據庫版本升級的辦法

來源:互聯網
上載者:User

標籤:

public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version) 這個方法在實現時需要重寫。
 
public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version)

 

這個方法在實現時需要重寫。

onUpgrade方法會在數據庫需要升級的時候調用。可以用來增刪表或者其他任何操作。如果你想添加新的列你可以使用ALTER TABLE 插入表中。如果需要重新命名或者刪掉列,可以使用ALTER TABLE 重新命名舊表,然後創建新的表,並將舊表數據添加到新表中。如果拋出異常,將自動回滾。

 

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函數的參數傳進來,便於開發者知道數據庫應該從哪個版本升級到哪個版本。

升級完成後,數據庫會自動存儲最新的版本號為當前數據庫版本號。

-----------------------------------------------------------------------------------------------------------------

上面採用的是SQLiteOpenHelper中的onUpgrade方法實現數據庫的升級。

     首先獲取Context:

private Context  mContext=this;

 

然後實現FinalDb內的靜態方法:

 

FinalDb.create(mContext,"afinal.db",true,2,this);

 

實現FinalDb的DbUpdateListener介面中的方法:

 

@Overridepublic void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {// TODO Auto-generated method stubtry {InputStream in = mContext.getAssets().open("patch.sql");BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));String sqlUpdate = null;while ((sqlUpdate = bufferedReader.readLine()) != null) {if (!TextUtils.isEmpty(sqlUpdate)) {db.execSQL(sqlUpdate);}}bufferedReader.close();in.close();} catch (SQLException e) {System.out.println(e.toString());} catch (IOException e) {System.out.println(e.toString());}}

 

時間緊迫,沒有寫太多,大家可以自己研究。

在Android中afinal架構下實現sqlite數據庫版本升級的辦法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.