Android資料庫升級執行個體,android資料庫執行個體

來源:互聯網
上載者:User

Android資料庫升級執行個體,android資料庫執行個體

第一部分

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

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

參考:StackOverFlow對“資料庫版本在資料庫中的儲存位置”的問答。

 

第二部分做Android應用,不可避免的會與SQLite打交道。隨著應用的不斷升級,原有的資料庫結構可能已經不再適應新的功能,這時候,就需要對 SQLite資料庫的結構進行升級了。 SQLite提供了ALTER TABLE命令,允許使用者重新命名或添加新的欄位到已有表中,但是不能從表中刪除欄位。
並且只能在表的末尾添加欄位,比如,為 Subscription添加兩個欄位:
1 ALTER TABLE Subscription ADD COLUMN Activation BLOB;
2 ALTER TABLE Subscription ADD COLUMN Key BLOB;


  另外,如果遇到複雜的修改操作,比如在修改的同時,需要進行資料的轉移,那麼可以採取在一個事務中執行如下語句來實現修改表的需求。
  1. 將表名改為暫存資料表
         ALTER TABLE Subscription RENAME TO __temp__Subscription;

  2. 建立新表
        CREATE TABLE Subscription (OrderId VARCHAR(32) PRIMARY KEY ,UserName VARCHAR(32) NOTNULL ,ProductId VARCHAR(16) NOT NULL);
  
      3. 匯入資料  
         INSERT INTO Subscription SELECT OrderId, “”, ProductId FROM __temp__Subscription;
  或者  
        INSERT INTO Subscription() SELECT OrderId, “”, ProductId FROM __temp__Subscription;
  * 注意 雙引號”” 是用來補充原來不存在的資料的
  
      4. 刪除暫存資料表  
        DROP TABLE __temp__Subscription;

  通過以上四個步驟,就可以完成舊資料庫結構向新資料庫結構的遷移,並且其中還可以保證資料不會應為升級而流失。
  當然,如果遇到減少欄位的情況,也可以通過建立暫存資料表的方式來實現。


協助,android執行個體化資料庫問題

private static final String DATABASE_NAME = "test.db";
private static final int DATABASE_VERSION = 1;

public class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

這樣就可以了,參數先定義好就可以了啊。你可以再試試。我也是做android開發的,有問題可以和我交流,我的qq是379371398,希望採納。
 
安卓連結sql server資料庫執行個體,要可以啟動並執行

在這找找www.csdn.net/
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.