小。速度很快。可靠。
选择任意三个选项。
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(虚拟专用服务器)解释以下查询参数:
- vfs(vfs):“vfs”参数可用于指定提供操作系统接口的VFS对象用于访问磁盘上的数据库文件。如果此选项设置为使用默认VFS对象的空字符串。指定未知VFS是一个错误。如果使用sqlite3_open_v2(),并且vfs选项为则选项指定的VFS优先于作为第四个参数传递给sqlite3_openv2()的值。
- 模式:模式参数可以设置为“ro”、“rw”、,“rwc”或“内存”。尝试将其设置为任何其他值是一个错误。如果指定了“ro”,则数据库将以只读方式打开访问,就像SQLITE_OPEN_READONLY(SQLITE_打开_只读)旗帜已在sqlite3_open_v2()的第三个参数。如果模式选项设置为“rw”,然后打开数据库进行读写(但不创建)访问,就像SQLITE_OPEN_READWRITE(但不是SQLITE_OBEN_CREATE)具有已设置。值“rwc”相当于设置SQLITE_OPEN_READWRITE和SQLITE_OBEN_CREATE。如果模式选项为设置为“内存”,然后纯内存中数据库从不阅读的或使用磁盘写入。为指定值是错误的模式参数的限制性低于将第三个参数中的标志传递给sqlite3openv2()。
- 隐藏物:缓存参数可以设置为“shared”或“私人”。将其设置为“shared”相当于将传递给的flags参数中的SQLITE_OPEN_SHAREDCACHE位sqlite3_open_v2()。将缓存参数设置为“private”是相当于设置SQLITE_OPEN_PRIVATECACHE位。如果使用sqlite3_open_v2(),并且“cache”参数出现在URI文件名,其值覆盖通过设置SQLITE_OPEN_PRIVATECACHE或SQLITE_OBEN_SHAREDCACHE标志。
- 粒子群优化:psow参数指示是否电源安全覆盖属性不适用于数据库文件所在的存储媒体。
- 后面加上:nolock参数是一个布尔查询参数如果设置,则在回滚日志模式下禁用文件锁定。这个对于访问不属于支撑锁定。警告:如果出现两种情况,可能会导致数据库损坏或多个进程写入同一数据库以及其中任何一个进程使用nolock=1。
- 不可变的:不可变参数是布尔查询参数,指示数据库文件存储在只读媒体。当设置了immutable时,SQLite假定数据库文件无法更改,即使是具有更高级别的进程也无法更改权限,因此数据库以只读方式打开,并且所有锁定并且禁用更改检测。警告:设置不可变数据库文件上的属性可能会导致实际发生更改不正确的查询结果和/或SQLITE_CORRUPT错误。另请参见:SQLITE_IOCAP_IMMUTABLE数据库.
在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_模板目录)
另请参见列表物体,常量、和功能.