Archive

文章標籤 ‘sqlite’

Android SQLite更新資料庫作法

2012年7月7日 尚無評論

這次在先前製作的Android Apps 有需要進行SQLite資料庫的更新
以為系統能完美的自動更新~XD 但看來還是沒有想像中的聰明
這兩年新的技術及資訊一直出來,讓我覺得似乎什麼都好像已經包好似的

好~轉正題,當SQLite資料庫要更新時該怎麼做呢?
其實Android早就有想到了(其實也規劃的不錯啦)

首先,在你實作連結SQLite的物件之中有個版本號,當你有異動時就往後加一,就和Apps要更版一樣要加版本號

pubilc class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;

再來繼承SQLiteOpenHelper後,它提供了二個metohd,onCreate & onUpgrade 可以實作,我就擷錄人家寫的一段話來介紹這兩個method:

public void onCreate(SQLiteDatabase db)
這裡面的onCreate是指資料庫onCreate時,而不是DatabaseHelper的onCreate。也就是說,如果已經指定 database已經存在,那麼在重新運行程序的時候,就不會執行這個方法了。要不然,豈不是每次重新啟動程序都要重新建立一次資料庫了!在這個方法中,完成了資料庫的建立工作。也就是那個execSQL()方法。


public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
在程序的開發維護過程中,資料庫的結構可能會有變化,那麼這個方法就有用處了。在DatabaseHelper這個對象一建立時,就已經把參數 DATABASE_VERSION傳入,這樣,如果Android發現此版本與現有版本不一致,就會調用這個onUpgrate方法。於是,可以在這裡面實現一些數據的upgrade工作,比如說建立一個臨時表,將數據由臨時表中轉到新的表結構中。需要注意的是,這裡面的onUpgrade是在版本不一致時調用,也就是說不管當前需要的版本高於現有版本還是低於現有版本,都會出發這個方法,類似的這種情況,就需要對oldVersion和 newVersion進行判斷之後再決定使用什麼策略來更新數據。

所以就把你要異動資料庫的script 寫在onUpgrade裡,還可以依照舊版本號及新的版本號看要執行哪些script,相容性的設計都考量進去了

這樣當上傳到android play(market)後,當有人下載更新時就會去執行更新的script了~^^

參考連結:http://www.cnblogs.com/linzheng/archive/2011/01/22/1942087.html

Categories: Android Tags: , ,