Android之SQLite使用

..

SQLite

SQLite是一個進程內的庫,實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎。

它是一個零配置的數據庫,這意味着與其他數據庫不一樣,您不需要在系統中配置。就像其他數據庫,SQLite 引擎不是一個獨立的進程,可以按應用程序需求進行靜態或動態連接。SQLite 直接訪問其存儲文件.


優勢

  1. 不需要一個單獨的服務器進程或操作的系統(無服務器的)。
  2. SQLite 不需要配置,這意味着不需要安裝或管理。
  3. 一個完整的 SQLite 數據庫是存儲在一個單一的跨平臺的磁盤文件。
  4. SQLite 是非常小的,是輕量級的,完全配置時小於 400KiB,省略可選功能配置時小於250KiB。
  5. SQLite 是自給自足的,這意味着不需要任何外部的依賴。
  6. SQLite 事務是完全兼容 ACID 的,允許從多個進程或線程安全訪問。
  7. SQLite 支持 SQL92(SQL2)標準的大多數查詢語言的功能。
  8. SQLite 使用 ANSI-C 編寫的,並提供了簡單和易於使用的 API。
  9. SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運行。

綜合來看,即輕量 兼容 多端 無需配置 無外部依賴 擁有簡單易懂的API 安全

SQLiteDatabase和SQLiteOpenHelper

SQLiteDatabase是Android SDK中操作數據庫的核心類之一。

使用SQLiteDatabase可以打開數據庫,也可以對數據庫進行操作。

然而爲了數據庫升級的需要以及使用更方便,往往使用SQLiteOpenHelper的子類來完成創建、打開數據庫及各種數據庫操作。

SQLiteOpenHelper是個抽象類,在該類中有如下兩個抽象方法,SQLiteOpenHelper的子類必須實現這兩個方法。

public abstract void onCreate(SQLiteDatabase db);
public abstract void onUpdate(SQLiteDatabase db,int oldVersion,int newVersion);

SQLiteOpenHelper中onCreate和onUpdate方法

SQLiteOpenHelper會自動檢測數據庫文件是否存在。

如果存在,會打開這個數據庫,在這種情況下就不會調用onCreate()方法。

如果數據庫文件不存在,SQLiteOpenHelper首先會創建一個數據庫文件,然後打開這個數據庫,最後調用onCreate()方法。

因此,onCreate()方法一般用來在新創建的數據庫中建立表、視圖等數據庫組建。也就是說oncreate()方法在數據庫文件第一次創建時調用。

先看看SQLiteOpenHelper類的構造方法再解釋onUpdate()方法何時會被調用。

public SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version);

其中name參數表示數據庫文件名(不包括文件路徑),SQLiteOpenHelper會根據這個文件名創建數據庫文件。

version表示數據庫的版本號。如果當前傳入的數據庫版本號比上次創建或升級的版本號高,SQLiteOpenHelper就會調用onUpdate()方法。

也就是說,當數據庫第一次創建時會有一個初始的版本號。當需要對數據庫中的表、視圖等組建升級時可以增大版本號,再重新創建它們。

總結一下oncreate()和onUpdate()調用過程:

  1. 如果數據庫文件不存在,SQLiteOpenHelper在自動創建數據庫後會調用oncreate()方法,在該方法中一般需要創建表、視圖等組件。在創建前數據庫一般是空的,因此不需要先刪除數據庫中相關的組件。
  2. 如果數據庫文件存在,並且當前版本號高於上次創建或升級的版本號,SQLiteOpenHelper會調用onUpdate()方法,調用該方法後會更新數據庫的版本號。

相應的API介紹

方法名 作用
onCreate() 創建數據庫
onUpgrade() 升級數據庫
close() 關閉所有打開的數據庫對象
execSQL() 可進行增刪改操作, 不能進行查詢操作
query()、rawQuery() 查詢數據庫
insert() 插入數據
delete() 刪除數據
getWritableDatabase() 創建或打開可以讀/寫的數據庫,通過返回的SQLiteDatabase對象對數據庫進行操作
getReadableDatabase() 創建或打開可讀的數據庫,通過返回的SQLiteDatabase對象對數據庫進行操作

使用getWritableDatabase和getReadableDatabase創建數據庫默認的保存路徑是在:/data/data/PACKAGE_NAME/databases 目錄下.

如果想在其他目錄創建數據庫,需要使用 SQLiteDatabase.openOrCreateDatabase函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章