Small. Fast. Reliable.
Choose any three.

SQLite C接口

数据库连接配置选项

#定义SQLITE_DBCONFIG_MAINDBNAME 1000 / * const char * * /
#定义SQLITE_DBCONFIG_LOOKASIDE 1001 / * void * int int * /
#定义SQLITE_DBCONFIG_ENABLE_FKEY 1002 / * int int * * /
#定义SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 / * int int * * /
#定义SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 / * int int * * /
#定义SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 / * int int * * /
#定义SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 / * int int * * /
#定义SQLITE_DBCONFIG_ENABLE_QPSG 1007 / * int int * * /
#定义SQLITE_DBCONFIG_TRIGGER_EQP 1008 / * int int * * /
#定义SQLITE_DBCONFIG_RESET_DATABASE 1009 / * int int * * /
#定义SQLITE_DBCONFIG_DEFENSIVE 1010 / * int int * * /
#定义SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 / * int int * * /
#定义SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 / * int int * * /
#定义SQLITE_DBCONFIG_DQS_DML 1013 / * int int * * /
#定义SQLITE_DBCONFIG_DQS_DDL 1014 / * int int * * /
#定义SQLITE_DBCONFIG_ENABLE_VIEW 1015 / * int int * * /
#定义SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 / * int int * * /
#定义SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 / * int int * * /
#定义SQLITE_DBCONFIG_MAX 1017 / *最大的DBCONFIG * /

这些常量是可用的整数配置选项,可以作为第二个参数传递给sqlite3_db_config()接口。

将来的SQLite版本中可能会添加新的配置选项。现有的配置选项可能会中断。应用程序应该检查来自sqlite3_db_config()的返回码,以确保调用能够正常进行。所述sqlite3_db_config()接口将返回一个非零的错误代码,如果一个中断或不支持的配置选项被调用。

SQLITE_DBCONFIG_LOOKASIDE
此选项采用三个附加参数来确定数据库连接后备内存分配器配置。第一个参数(sqlite3_db_config()的第三个参数是指向用于后备内存的内存缓冲区的指针。SQLITE_DBCONFIG_LOOKASIDE动词后的第一个参数可能为NULL,在这种情况下,SQLite将使用sqlite3_malloc()分配后备缓冲区本身。。第二个参数是每个后备缓冲区的大小。第三个参数是插槽数。第一个参数中的缓冲区大小必须大于或等于第二个和第三个参数的乘积。缓冲区必须与8字节边界对齐。如果SQLITE_DBCONFIG_LOOKASIDE的第二个参数不是8的倍数,它会在内部舍入为8的下一个较小倍数。仅当数据库连接的后备内存配置当前未使用后备内存时,才可以更改该数据库连接的后备内存配置。换句话说,当sqlite3_db_status返回的“当前值” (D,SQLITE_CONFIG_LOOKASIDE,...)为零。在使用后备存储器时,任何更改后备存储器配置的尝试都将使配置保持不变,并返回 SQLITE_BUSY

SQLITE_DBCONFIG_ENABLE_FKEY
此选项用于启用或禁用 外键约束的实施。应该有两个附加参数。第一个参数是一个整数,该整数为0以禁用FK强制执行,为正数以启用FK强制执行,为负数以保持FK强制执行不变。第二个参数是指向整数的指针,在该整数中写入0或1以指示FK强制是在此调用之后关闭还是打开。第二个参数可以是NULL指针,在这种情况下,不会报告FK强制设置。

SQLITE_DBCONFIG_ENABLE_TRIGGER
此选项用于启用或禁用触发器。应该有两个附加参数。第一个参数是一个整数,其值为0以禁用触发器,为正数以启用触发器,或者为负数以保持设置不变。第二个参数是指向整数的指针,该整数写入0或1,以指示在此调用之后是禁用还是启用触发器。第二个参数可以是NULL指针,在这种情况下,不会报告回触发设置。

最初,此选项禁用所有触发器。但是,从SQLite版本3.35.0开始,即使关闭此选项,仍然允许TEMP触发器。因此,换句话说,此选项现在仅禁用主数据库模式或ATTACH版本的数据库模式中的触发器。

SQLITE_DBCONFIG_ENABLE_VIEW
此选项用于启用或禁用视图。应该有两个附加参数。第一个参数是一个整数,其值为0表示禁用视图,为正数表示启用视图,为负数表示不更改设置。第二个参数是指向整数的指针,在该整数中写入0或1,以指示在此调用之后是禁用视图还是启用视图。第二个参数可以是NULL指针,在这种情况下,不会回传视图设置。

最初,此选项禁用所有视图。但是,从SQLite版本3.35.0开始,即使关闭此选项,仍允许使用TEMP视图。因此,换句话说,此选项现在仅禁用主数据库模式或ATTACH版本的数据库模式中的视图。

SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
此选项用于启用或禁用 fts3_tokenizer()函数,该函数是 FTS3全文搜索引擎扩展的一部分。应该有两个附加参数。第一个参数是一个整数,它是0以禁用fts3_tokenizer()或为正数以启用fts3_tokenizer()或为负数以保持设置不变。第二个参数是指向整数的指针,该整数写入0或1以指示在此调用之后是禁用还是启用fts3_tokenizer。第二个参数可以是NULL指针,在这种情况下,不会回传新设置。

SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
此选项用于 独立于load_extension() SQL函数来启用或禁用sqlite3_load_extension()接口。所述sqlite3_enable_load_extension() API激活或关闭两个C-API sqlite3_load_extension()和SQL函数load_extension()。应该有两个附加参数。当此接口的第一个参数为1时,则仅启用C-API,而SQL函数保持禁用状态。如果此接口的第一个参数为0,则C-API和SQL函数都将被禁用。如果第一个参数为-1,则不会更改C-API或SQL函数的状态。第二个参数是指向整数的指针,该整数写入0或1以指示在此调用之后是禁用还是启用sqlite3_load_extension()接口。第二个参数可以是NULL指针,在这种情况下,不会回传新设置。

SQLITE_DBCONFIG_MAINDBNAME
此选项用于更改“主”数据库模式的名称。唯一的参数是指向常量UTF8字符串的指针,该字符串将代替“ main”成为新的架构名称。SQLite不会复制新的主模式名称字符串,因此应用程序必须确保传递到此DBCONFIG选项的参数在数据库连接关闭之前保持不变。

SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE
通常,当关闭处于wal模式的数据库或将其与数据库句柄分离或断开连接时,SQLite会检查这是否意味着现在完全没有与该数据库的连接。如果是这样,它将在关闭连接之前执行检查点操作。此选项可用于替代此行为。传递给此操作的第一个参数是整数-正数表示禁用关闭检查点;零值表示默认(启用),负数表示设置不变。第二个参数是指向整数的指针,该整数写入0或1以指示是否关闭了关卡检查点-如果未禁用,则为0,如果未禁用,则为1。

SQLITE_DBCONFIG_ENABLE_QPSG
SQLITE_DBCONFIG_ENABLE_QPSG选项激活或取消激活查询计划程序稳定性保证(QPSG)。当QPSG处于活动状态时,单个SQL查询语句将始终使用相同的算法,而不管绑定参数的值如何。QPSG禁用了一些查询优化,这些查询优化会查看绑定参数的值,这会使某些查询变慢。但是,QPSG具有行为更可预测的优势。在启用QPSG的情况下,SQLite将始终在字段中使用与实验室测试期间相同的查询计划。此设置的第一个参数是一个整数,该整数为0以禁用QPSG,为正数以启用QPSG,或者为负数以保持设置不变。第二个参数是指向整数的指针,该整数写入0或1以指示在此调用之后是禁用还是启用QPSG。

SQLITE_DBCONFIG_TRIGGER_EQP
默认情况下,EXPLAIN QUERY PLAN命令的输出不包括触发程序执行的任何操作的输出。此选项用于设置或清除(默认)控制此行为的标志。传递给此操作的第一个参数是整数-正数表示启用触发器程序的输出,零值表示禁用它,负数表示使设置保持不变。第二个参数是指向整数的指针,向该整数写入0或1以指示是否已禁用触发输出-如果未禁用则为0,否则为1。

SQLITE_DBCONFIG_RESET_DATABASE
设置SQLITE_DBCONFIG_RESET_DATABASE标志,然后运行 VACUUM以便将数据库重置回没有模式且没有内容的空数据库。以下过程甚至适用于严重损坏的数据库文件:
  1. 如果是新打开的数据库连接,请通过准备然后放弃对数据库的查询或调用sqlite3_table_column_metadata()来忽略任何错误,以确保它已读取数据库架构。仅当应用程序希望在重置后将数据库保持在WAL模式下(如果应用程序希望在重置后将数据库保持在WAL模式下)时,才需要执行此步骤。
  2. sqlite3_db_config(db,SQLITE_DBCONFIG_RESET_DATABASE,1,0);
  3. sqlite3_exec(db,“ VACUUM ”,0,0,0);
  4. sqlite3_db_config(db,SQLITE_DBCONFIG_RESET_DATABASE,0,0);
由于重置数据库是破坏性且不可逆的,因此该过程需要使用这种晦涩的API和多个步骤来帮助确保它不会偶然发生。

SQLITE_DBCONFIG_DEFENSIVE
SQLITE_DBCONFIG_DEFENSIVE选项激活或禁用数据库连接的“防御”标志。启用防御标志后,将禁用允许普通SQL故意破坏数据库文件的语言功能。禁用的功能包括但不限于以下功能:

SQLITE_DBCONFIG_WRITABLE_SCHEMA
SQLITE_DBCONFIG_WRITABLE_SCHEMA选项激活或停用“ writable_schema”标志。这具有相同的效果,并且在逻辑上等效于将PRAGMA writable_schema = ONPRAGMA writable_schema = OFF设置。此设置的第一个参数是整数,该整数为0以禁用writable_schema,为正数以启用writable_schema,或者为负数以使设置保持不变。第二个参数是指向整数的指针,该整数写入0或1以指示在此调用之后是启用还是禁用writable_schema。

SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
SQLITE_DBCONFIG_LEGACY_ALTER_TABLE选项激活或停用ALTER TABLE RENAME命令的旧行为,使其行为与3.24.02018-06-04版本之前的行为相同。有关其他信息,请参见ALTER TABLE RENAME文档上的“兼容性声明” 。也可以使用PRAGMA legacy_alter_table语句打开和关闭此功能。

SQLITE_DBCONFIG_DQS_DML
SQLITE_DBCONFIG_DQS_DML选项仅针对DML语句(即DELETE,INSERT,SELECT和UPDATE语句)激活或停用旧的双引号字符串文字错误功能。此设置的默认值由-DSQLITE_DQS 编译时选项确定。

SQLITE_DBCONFIG_DQS_DDL
SQLITE_DBCONFIG_DQS选项激活或停用DDL语句的旧的双引号字符串文字错误功能,例如CREATE TABLE和CREATE INDEX。此设置的默认值由-DSQLITE_DQS 编译时选项确定。

SQLITE_DBCONFIG_TRUSTED_SCHEMA
SQLITE_DBCONFIG_TRUSTED_SCHEMA选项告诉SQLite假定数据库模式不受恶意内容的污染。禁用SQLITE_DBCONFIG_TRUSTED_SCHEMA选项时,SQLite会采取其他防御措施来保护应用程序免受损害,包括: 为了兼容旧版本,此设置默认为“ on”,但是建议所有应用程序都将其关闭。也可以使用PRAGMA Trusted_schema语句控制此设置。

SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
SQLITE_DBCONFIG_LEGACY_FILE_FORMAT选项激活或停用旧文件格式标志。激活后,此标志将使所有新创建的数据库文件的模式格式版本号(在数据库标头中偏移量44处找到的4字节整数)为1。这又意味着生成的数据库文件将是可读可写的通过任何SQLite版本回3.0.0(2004-06-18)。如果没有此设置,则3.3.0(2006-01-11)之前的SQLite版本通常无法理解新创建的数据库。写下这些文字之后,现在几乎不需要生成与3.0.0版完全兼容的数据库文件,因此此设置几乎没有实际用途,但是提供了此设置,以便SQLite可以继续声明该文件。能够生成与版本3兼容的新数据库文件。

请注意,当启用SQLITE_DBCONFIG_LEGACY_FILE_FORMAT设置时,VACUUM命令将在尝试处理具有生成的列和降序索引的表时失败,并显示模糊错误。由于SQLite 3.3.0和更早版本不支持生成的列或降序索引,因此不将其视为错误。

另请参见 对象常量函数的列表