..
SQLite
SQLite是一個進程內的庫,實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎。
它是一個零配置的數據庫,這意味着與其他數據庫不一樣,您不需要在系統中配置。就像其他數據庫,SQLite 引擎不是一個獨立的進程,可以按應用程序需求進行靜態或動態連接。SQLite 直接訪問其存儲文件.
優勢
- 不需要一個單獨的服務器進程或操作的系統(無服務器的)。
- SQLite 不需要配置,這意味着不需要安裝或管理。
- 一個完整的 SQLite 數據庫是存儲在一個單一的跨平臺的磁盤文件。
- SQLite 是非常小的,是輕量級的,完全配置時小於 400KiB,省略可選功能配置時小於250KiB。
- SQLite 是自給自足的,這意味着不需要任何外部的依賴。
- SQLite 事務是完全兼容 ACID 的,允許從多個進程或線程安全訪問。
- SQLite 支持 SQL92(SQL2)標準的大多數查詢語言的功能。
- SQLite 使用 ANSI-C 編寫的,並提供了簡單和易於使用的 API。
- 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()調用過程:
- 如果數據庫文件不存在,SQLiteOpenHelper在自動創建數據庫後會調用oncreate()方法,在該方法中一般需要創建表、視圖等組件。在創建前數據庫一般是空的,因此不需要先刪除數據庫中相關的組件。
- 如果數據庫文件存在,並且當前版本號高於上次創建或升級的版本號,SQLiteOpenHelper會調用onUpdate()方法,調用該方法後會更新數據庫的版本號。
相應的API介紹
方法名 | 作用 |
---|---|
onCreate() |
創建數據庫 |
onUpgrade() |
升級數據庫 |
close() |
關閉所有打開的數據庫對象 |
execSQL() |
可進行增刪改操作, 不能進行查詢操作 |
query()、rawQuery() |
查詢數據庫 |
insert() |
插入數據 |
delete() |
刪除數據 |
getWritableDatabase() |
創建或打開可以讀/寫的數據庫,通過返回的SQLiteDatabase對象對數據庫進行操作 |
getReadableDatabase() |
創建或打開可讀的數據庫,通過返回的SQLiteDatabase對象對數據庫進行操作 |
使用getWritableDatabase和getReadableDatabase創建數據庫默認的保存路徑是在:/data/data/PACKAGE_NAME/databases 目錄下.
如果想在其他目錄創建數據庫,需要使用 SQLiteDatabase.openOrCreateDatabase
函數。