SQLite 3.0 是建立在 SQLite 2.8.13 代碼基礎上的全新版本,但它採用了不相容的資料庫檔案格式與 API 介面。這次重大升級主要為了滿足三大核心需求:完整支援 UTF-16 編碼、允許使用者自訂文字排序規則、以及支援對 BLOB 欄位建立索引。為了實現這些特性,資料庫內部格式徹底重設計,版本號跨越至 3.0。所有 API 函數與資料結構的前綴統一從 sqlite_ 變更為 sqlite3_,有效避免了同時連結 SQLite 2.x 與 3.0 時的符號衝突。
由於 C 語言缺乏統一的 UTF-16 字串類型規範,SQLite 採用 void* 指標指向 UTF-16 編碼字串,讓呼叫端自行映射至平台適用的類型(如 wchar_t* 或 unsigned short*),極大提升了跨平台靈活性。
SQLite 3.0 提供 83 個 API 函數,輔以多種資料結構與巨集定義。雖然數量龐大,但核心使用模式極簡:最基本的程式僅需三個函數——sqlite3_open()、sqlite3_exec()、sqlite3_close() 即可完成開啟、執行、關閉全流程。若需精細控制執行流程,可使用 sqlite3_prepare() 將 SQL 編譯為位元組碼,再透過 sqlite3_step() 逐步執行;sqlite3_column_ 系列函數用於提取查詢結果集。大多數介面函數同時提供 UTF-8 與 UTF-16 兩個版本,並內建使用者自訂 SQL 函數與排序函數的註冊機制。
typedef struct sqlite3 sqlite3;
int sqlite3_open(const char*, sqlite3**);
int sqlite3_open16(const void*, sqlite3**);
int sqlite3_close(sqlite3*);
const char *sqlite3_errmsg(sqlite3*);
const void *sqlite3_errmsg16(sqlite3*);
int sqlite3_errcode(sqlite3*);
sqlite3_open() 回傳整數錯誤碼(而非 2.x 版的結構體指標)。sqlite3_open16() 接受 UTF-16 編碼的資料庫檔案名(採用本機位元組序),建立新資料庫時內部文字編碼預設為 UTF-16;sqlite3_open() 則預設為 UTF-8。開啟/建立指令會被快取,直到資料庫首次實際被存取時才真正執行,此期間可透過 PRAGMA 設定文字編碼、頁面大小等參數。
sqlite3_errcode() 取得最近一次 API 呼叫的錯誤碼;sqlite3_errmsg() 回傳對應的 UTF-8 錯誤訊息,sqlite3_errmsg16() 回傳 UTF-16 版本。錯誤訊息會在下一次任意 SQLite API 呼叫時清除。錯誤碼定義與 SQLite 2.x 保持一致(如 SQLITE_OK、SQLITE_ERROR、SQLITE_INTERNAL 等)。