SQLite C 接口
初始化 SQLite 库
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_shutdown() 的调用是自上次 sqlite3_initialize() 以来对 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 是使用SQLITE_OMIT_AUTOINIT编译的 编译时选项,则省略对 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() 调用。在为 Unix、Windows 或 OS/2 编译时,sqlite3_os_init() 和 sqlite3_os_end() 的适当实现已内置到 SQLite 中。当为其他平台构建时 (使用SQLITE_OS_OTHER=1编译时选项),应用程序必须为 sqlite3_os_init() 和 sqlite3_os_end() 提供合适的实现。sqlite3_os_init() 或 sqlite3_os_end() 的应用程序提供的实现必须在成功时返回SQLITE_OK和其他一些失败时的 错误代码。