AndroidSqlite資料庫版本升級管理初探

hylinux1024發表於2013-06-01

Android Sqlite資料庫版本升級管理初探

http://angrycode.cn/archives/428

在做Android專案涉及到版本升級,而資料庫同樣也會因為需求的變更而導致表的增減以及欄位的增減。這是不可避免的。
麥洛剛開始做專案的時候很少考慮這個問題,但當軟體需要升級版本後,資料庫的表結構很有可能就改變了,如果不考慮資料庫的版本升級,那麼在軟體升級時,就會因為資料庫找不到
某些欄位而出錯。也不能把之前版本的資料庫刪除,因為以前版本的資料就會丟失。因此就需要認真的去管理資料庫的版本了。

Android為開發者提供了SQLiteOpenHelper 這個訪問資料庫的介面。開發者只需要繼承這個介面就可以了,它對外提供了兩個方法:onCreate(SQLiteDatabase db)與
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。這兩個方法都是由系統自動呼叫的。
onCreate()方法用於初次使用時系統會檢查資料庫的是否檔案.如果不存在則建立資料庫表;如果存在則檢查資料庫的版本號,如果這次的版本號比上次的版本號高,則呼叫onUpgrade()更新資料庫表結構。

在SQLiteOpenHelper的子類的構造方法裡面需要傳遞一個資料庫的版本號,這個版本號是從1開始的,隨著版本的更新,這個號碼也是不斷變化的。
例如軟體在最初時的資料庫版本是1,下次在升級的時候,就需要更改為2了(當然只要改成比上次的版本號要大就行了)。

下面是一個簡單例子,angrycode:

<pre>
public class DatabaseHelper extends SQLiteOpenHelper {
/**
* log tag
*/
private static final String TAG = "DatabaseHelper";
/**
* 資料庫名稱
*/
private static final String DB_NAME = "user_manager.db";
/**
* 資料庫版本號,預設從1開始,2013/5/31升級為2,需要資料庫更新時,更改此值。
*/
private static final int DB_VERSION = 2;

private static DatabaseHelper instance = new DatabaseHelper(MyApplication.getContext());
private DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
private DatabaseHelper(Context context,int version){
super(context,DB_NAME,null,version);
}
public static DatabaseHelper getDatabaseHelper(){
return instance;
}
@Override
public void onCreate(SQLiteDatabase db) {
//建立使用者表
db.execSQL("create table if not exists user_table (id integer primary key autoincrement,name varchar(32) not null)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//這裡對錶進行修改
//String sql1 = "DROP TABLE IF EXISTS user_table;";
String sql7 = "ALTER TABLE user_table ADD COLUMN phone_number varchar(15);    
db.execSQL(sql7);
//onCreate(db);
}
</pre>

 


相關文章