小。速度很快。可靠。
选择任意三个选项。

SQLite C接口

打开新的数据库连接

int sqlite3_打开(const char*文件名,/*数据库文件名(UTF-8)*/sqlite3**ppDb/*OUT:SQLite数据库句柄*/);int sqlite3_open16(const void*文件名,/*数据库文件名(UTF-16)*/sqlite3**ppDb/*OUT:SQLite数据库句柄*/);int sqlite3_open_v2(const char*文件名,/*数据库文件名(UTF-8)*/sqlite3**ppDb,/*OUT:SQLite数据库句柄*/int标志,/*标志*/const char*zVfs/*要使用的VFS模块的名称*/);

这些例程按照filename参数。文件名参数被解释为UTF-8sqlite3_open()和sqlite3_ open_v2()以及本机字节中的UTF-16订购sqlite3_open16()。A类数据库连接手柄通常是在*ppDb中返回,即使发生错误。唯一的例外是如果SQLite无法分配内存来保存方形3对象,NULL将写入*ppDb,而不是指向方形3对象。如果成功打开(和/或创建)数据库,则SQLITE_OK(SQLITE_OK)返回。否则错误代码返回。这个sqlite3_errmsg()sqlite3_errmsg16()例程可用于获取任何sqlite3_open()例程的。

对于使用创建的数据库,默认编码为UTF-8sqlite3_open()或sqlite 3_open_v2()。数据库的默认编码使用sqlite3_open16()创建的文件将按本机字节顺序为UTF-16。

无论打开时是否发生错误,资源与关联数据库连接手柄应通过以下方式松开将其传递给sqlite3_close()当不再需要时。

sqlite3_open_v2()接口的工作原理与sqlite3_ open()类似除了它接受两个附加参数进行附加控制通过新的数据库连接。flags参数到sqlite3_open_v2()必须至少包含以下内容之一三种标志组合:

SQLITE_OPEN_READONLY(SQLITE_打开_只读)
数据库以只读模式打开。如果数据库有不存在,返回错误。

SQLITE_OPEN_READWRITE数据库
如果可能,打开数据库进行读写,或仅当文件受操作写保护时才读取系统。无论哪种情况,数据库必须已经存在,否则返回错误。出于历史原因,如果在由于OS级权限,读写模式失败,尝试使其以只读模式打开。sqlite3_db_readonly()可以是用于确定数据库是否读写。

SQLITE_OPEN_READWRITE数据库|SQLITE_OPEN_CREATE(SQLITE_打开_创建)
打开数据库进行读写,并在以下情况下创建数据库它还不存在。这是通常用于sqlite3_open()和sqlite 3_open16()。

除了必需的标志外,以下可选标志包括还支持:

SQLITE_OPEN_URI(打开)
如果设置了此标志,则文件名可以解释为URI。

SQLITE_OPEN_MEMORY(SQLITE_打开_内存)
数据库将作为内存中的数据库打开。数据库由“filename”参数命名,用于缓存共享,如果启用了共享缓存模式,则忽略“文件名”。

SQLITE_OPEN_NOMUTEX公司
新的数据库连接将使用“多线程”线程模式。这意味着允许单独的线程同时使用SQLite,只要每个线程使用不同的数据库连接.

SQLITE_OPEN_FULLMUTEX公司
新的数据库连接将使用“序列化”线程模式。这意味着多个线程可以安全地尝试同时使用相同的数据库连接。(Mutexes将阻止任何实际的并发,但在此模式下尝试没有害处。)

SQLITE_OPEN_SHAREDCACHE(打开共享缓存)
数据库已打开共享缓存启用,覆盖提供的默认共享缓存设置sqlite3_enable_shared_cache().这个不鼓励使用共享缓存模式从而共享缓存许多SQLite构建中可能会忽略这些功能。在这种情况下,此选项为no-op。

SQLITE_OPEN_PRIVATECACHE公司
数据库已打开共享缓存禁用,替代提供的默认共享缓存设置sqlite3_enable_shared_cache().

SQLITE_OPEN_EXRESCODE(SQLITE_OPEN_EXRESCODE)
数据库连接以“扩展结果代码模式”启动。换句话说,数据库行为具有ifsqlite3_extended_result_codes(数据库,1)数据库中调用的位置连接创建后立即连接。除设置外扩展结果代码模式,此标志还导致sqlite3_open_v2()返回扩展的结果代码。

SQLITE_OPEN_NOFOLLOW(SQLITE_打开_关闭)
数据库文件名不允许包含符号链接

如果sqlite3_open_v2()的第三个参数不是上面所示的所需组合可以选择与其他组合组合SQLITE_OPEN_*位那么行为是未定义的。SQLite的历史版本已默认忽略flags参数中多余的位sqlite3_open_v2(),但该行为可能无法执行SQLite的未来版本,因此应用程序不应依赖特别注意SQLITE_OPEN_EXCLUSIVE标志是一个no-op用于sqlite3_open_v2()。SQLITE_OPEN_EXCLUSIVE不会*导致*如果数据库已经存在,则打开将失败。SQLITE_OPEN_EXCLUSIVE标志用于VFS接口只有,而不是由sqlite3_open_v2()创建。

sqlite3_open_v2()的第四个参数是sqlite3_vfs对象定义操作系统接口应该使用新的数据库连接。如果第四个参数为空指针,然后是默认值sqlite3_vfs对象。

如果文件名为“:memory:”,则为专用临时内存数据库为连接创建。数据库连接已关闭。SQLite的未来版本可能使用以“:”字符开头的其他特殊文件名。建议在数据库文件名确实以开头时“:”字符,您应该在文件名前面加上路径名,例如“./”以避免歧义。

如果文件名是空字符串,则将创建磁盘数据库。此专用数据库将是数据库连接关闭后自动删除。

URI文件名

如果URI文件名解释被启用,文件名参数以“file:”开头,然后将文件名解释为URI.URI如果SQLITE_OPEN_URI数据库标志是在第三个参数中设置为sqlite3_open_v2(),如果它有已使用全局启用SQLITE_CONFIG_URI公司选项sqlite3_config()方法或通过SQLITE_USE_URI数据库compile-time选项。URI文件名解释已关闭默认情况下,但SQLite的未来版本可能会启用URI文件名默认情况下的解释。请参阅“URI文件名“用于其他信息。

URI文件名根据RFC 3986进行解析。如果URI包含权限,则它必须是空字符串或字符串“本地主机”。如果权限不是空字符串或“localhost”错误返回给调用方。URI的片段组件,如果当前,被忽略。

SQLite使用URI的路径组件作为磁盘文件的名称其中包含数据库。如果路径以“/”字符开头,然后将其解释为绝对路径。如果路径没有开始带有“/”(表示URI中省略了权限部分)然后将路径解释为相对路径。在windows上,绝对路径的第一个组件是驱动器规格(例如“C:”)。

URI的查询组件可能包含解释的参数SQLite本身或自定义VFS实现.SQLite及其内置VFSe(虚拟专用服务器)解释以下查询参数:

在URI的查询组件中指定未知参数不是错误。SQLite的未来版本可能会理解其他查询参数。请参阅“对SQLite有特殊意义的查询参数“用于其他信息。

URI文件名示例

URI文件名结果
文件:data.db打开当前目录中的文件“data.db”。
文件:/home/fred/data.db
文件:///home/fred/data.db
文件://localhost/home/fred/data.db
打开数据库文件“/home/fred/data.db”。
文件://darkstar/home/fred/data.db一个错误。“黑暗之星”不是公认的权威。
file:///C:/Documents%20和%20Settings/fred/Desktop/data.db仅限Windows:在驱动器上打开fred桌面上的文件“data.db”C: ●●●●。注意,本例中的%20转义并不严格必要-空格字符可以逐字使用在URI文件名中。
文件:data.db?模式=ro&cache=专用打开当前目录中的文件“data.db”进行只读访问。无论共享缓存模式是否由启用默认情况下,使用专用缓存。
文件:/home/fred/data.db?vfs=unix-dotfile打开文件“/home/fred/data.db”。使用特殊的VFS“unix-dotfile”使用点文件代替posix公告锁定。
文件:data.db?模式=只读一个错误。“readonly”不是“mode”参数的有效选项。使用“ro”代替:“file:data.db?mode=ro”。

路径和中支持URI十六进制转义序列(%HH)URI的查询组件。十六进制转义序列由百分号-“%”-后面紧跟两个十六进制数字指定八位字节值。在的路径或查询组件之前URI文件名被解释,并使用UTF-8和所有十六进制转义序列替换为包含相应的八位字节。如果此进程生成无效的UTF-8编码,结果尚未确定。

Windows用户注意:用于文件名参数的编码sqlite3_open()和sqlite3_apen_v2()的必须是UTF-8,而不是其他值代码页当前已定义。包含国际名称的文件名字符必须转换为UTF-8才能传递到sqlite3_open()或sqlite 3_open_v2()。

Windows Runtime用户注意:必须设置临时目录调用sqlite3_open()或sqlite3_apen_v2()之前。否则,各种需要使用临时文件的功能可能会失败。

另请参见:sqlite3_temp_directory(sqlite3_模板目录)

另请参见列表物体,常量、和功能.