int sqlite3_initialize(void); int sqlite3_shutdown(void); int sqlite3_os_init(void); int sqlite3_os_end(void);
sqlite3_initialize() 常式會初始化 SQLite 函式庫。sqlite3_shutdown() 常式會釋放由 sqlite3_initialize() 分配的任何資源。這些常式旨在協助嵌入式系統上的程序初始化和關閉。使用 SQLite 的工作站應用程式通常不需要呼叫這些常式。
如果在程序的生命週期中是第一次呼叫 sqlite3_initialize(),或是自上次呼叫 sqlite3_shutdown() 後第一次呼叫 sqlite3_initialize(),則對 sqlite3_initialize() 的呼叫為「有效」呼叫。只有有效的 sqlite3_initialize() 呼叫才會執行初始化。所有其他呼叫都是無害的空操作。
如果自上次 sqlite3_initialize() 後是第一次呼叫 sqlite3_shutdown(),則對 sqlite3_shutdown() 的呼叫為「有效」呼叫。只有有效的 sqlite3_shutdown() 呼叫才會執行解除初始化。所有其他有效的 sqlite3_shutdown() 呼叫都是無害的空操作。
sqlite3_initialize() 介面是執行緒安全的,但 sqlite3_shutdown() 不是。sqlite3_shutdown() 介面只能從單一執行緒呼叫。在呼叫 sqlite3_shutdown() 之前,必須關閉所有開啟的資料庫連線,並且必須釋放所有其他 SQLite 資源。
除了其他事項之外,sqlite3_initialize() 會呼叫 sqlite3_os_init()。同樣地,sqlite3_shutdown() 會呼叫 sqlite3_os_end()。
sqlite3_initialize() 常式在成功時會返回 SQLITE_OK。如果由於某種原因,sqlite3_initialize() 無法初始化函式庫(也許它無法分配所需的資源,例如互斥鎖),它會返回 SQLITE_OK 以外的錯誤碼。
sqlite3_initialize() 常式會被許多其他 SQLite 介面內部呼叫,因此應用程式通常不需要直接呼叫 sqlite3_initialize()。例如,sqlite3_open() 會呼叫 sqlite3_initialize(),因此如果尚未初始化,SQLite 函式庫將在呼叫 sqlite3_open() 時自動初始化。但是,如果使用 SQLITE_OMIT_AUTOINIT 編譯時期選項編譯 SQLite,則會省略自動呼叫 sqlite3_initialize(),應用程式必須在使用任何其他 SQLite 介面前直接呼叫 sqlite3_initialize()。為了獲得最大的可移植性,建議應用程式在使用任何其他 SQLite 介面前總是直接呼叫 sqlite3_initialize()。未來的 SQLite 版本可能需要這樣做。換句話說,使用 SQLITE_OMIT_AUTOINIT 編譯 SQLite 時展現的行為可能會成為未來某些 SQLite 版本中的預設行為。
sqlite3_os_init() 常式會執行 SQLite 函式庫的作業系統特定初始化。sqlite3_os_end() 常式會復原 sqlite3_os_init() 的作用。這些常式執行的典型任務包括分配或釋放靜態資源、初始化全域變數、設定預設的 sqlite3_vfs 模組,或使用 sqlite3_config() 設定預設配置。
應用程式永遠不應該直接呼叫 sqlite3_os_init() 或 sqlite3_os_end()。應用程式應該只呼叫 sqlite3_initialize() 和 sqlite3_shutdown()。sqlite3_os_init() 介面會由 sqlite3_initialize() 自動呼叫,而 sqlite3_os_end() 則由 sqlite3_shutdown() 呼叫。適用於 sqlite3_os_init() 和 sqlite3_os_end() 的實作會在針對 Unix、Windows 或 OS/2 編譯 SQLite 時內建於 SQLite 中。當針對其他平台建置時(使用 SQLITE_OS_OTHER=1 編譯時期選項),應用程式必須提供 sqlite3_os_init() 和 sqlite3_os_end() 的合適實作。應用程式提供的 sqlite3_os_init() 或 sqlite3_os_end() 實作必須在成功時返回 SQLITE_OK,並在失敗時返回其他錯誤碼。