1.Android中通過SQLite數據庫引擎來實現結構化數據存儲。SQLite是一個嵌入式數據庫引擎,針對內存等資源有限的設備,提供的是一種高效的數據庫引擎。
2.Android提供了創建和使用SQLite數據庫的API。SQLiteDatabase代表一個數據庫對象,提供了操作數據庫的一些方法,另外還有一個SQLiteOpenHelper工具類提供更簡潔的功能。
3. SQLiteOpenHelper是SQliteDatabase的一個幫助類,用來管理數據庫的創建和版本更新。一般用法是定義一個類繼承之,並實現兩個抽象方法onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)類創建和跟新數據庫。
Android中操作數據庫首先要通過一個 類:android.database.sqlite.SQLiteOpenHelper。它封裝了如何打開一個數據庫,其中當然也包含如果數據庫不存在 就創建這樣的邏輯。
SQLiteOpenHelper 類
其中:
getReadableDatabase()得到可讀的數據庫,返回SQLiteDatabase對象,然後通過對象進行數據庫操作。
getWritableDatabase()得到可寫的數據庫,返回SQLiteDatabase對象,然後通過對象進行數據庫操作。
onCreate(SQLiteDatabase db)在第一次創建數據庫時調用。
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)在更改數據庫時都會調用。
onOpen(SQLiteDatabase db)當數據庫打開時調用。
close()關閉數據庫。
看一個例子:
這裡面,如下的語句需要解釋:
super(context, DATABASE_NAME, null, DATABASE_VERSION)
數據庫連接的初始化,中間的那個null,是一個CursorFactory參數,沒有仔細研究這個參數,暫時置空吧。
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進行判斷之後再決定使用什麼策略來更新數據。