Small. Fast. Reliable.
Choose any three.

SQLite C接口

配置选项

#定义SQLITE_CONFIG_SINGLETHREAD 1 / *无* /
#定义SQLITE_CONFIG_MULTITHREAD 2 / *无* /
#定义SQLITE_CONFIG_SERIALIZED 3 / *无* /
#定义SQLITE_CONFIG_MALLOC 4 / * sqlite3_mem_methods * * /
#定义SQLITE_CONFIG_GETMALLOC 5 / * sqlite3_mem_methods * * /
#定义SQLITE_CONFIG_SCRATCH 6 / *不再使用* /
#定义SQLITE_CONFIG_PAGECACHE 7 / * void *,int sz,int N * /
#定义SQLITE_CONFIG_HEAP 8 / *无效*,整数nByte,整数最小值* /
#定义SQLITE_CONFIG_MEMSTATUS 9 / *布尔值* /
#定义SQLITE_CONFIG_MUTEX 10 / * sqlite3_mutex_methods * * /
#定义SQLITE_CONFIG_GETMUTEX 11 / * sqlite3_mutex_methods * * /
/ *以前为SQLITE_CONFIG_CHUNKALLOC 12,现在未使用。* /
#定义SQLITE_CONFIG_LOOKASIDE 13 / * int int * /
#定义SQLITE_CONFIG_PCACHE 14 / *无操作* /
#定义SQLITE_CONFIG_GETPCACHE 15 / *无操作* /
#定义SQLITE_CONFIG_LOG 16 / * xFunc,void * * /
#定义SQLITE_CONFIG_URI 17 / * int * /
#定义SQLITE_CONFIG_PCACHE2 18 / * sqlite3_pcache_methods2 * * /
#定义SQLITE_CONFIG_GETPCACHE2 19 / * sqlite3_pcache_methods2 * * /
#定义SQLITE_CONFIG_COVERING_INDEX_SCAN 20 / *整数* /
#定义SQLITE_CONFIG_SQLLOG 21 / * xSqllog,void * * /
#定义SQLITE_CONFIG_MMAP_SIZE 22 / * sqlite3_int64,sqlite3_int64 * /
#定义SQLITE_CONFIG_WIN32_HEAPSIZE 23 / * int nByte * /
#定义SQLITE_CONFIG_PCACHE_HDRSZ 24 / * int * psz * /
#定义SQLITE_CONFIG_PMASZ 25 / * unsigned int szPma * /
#定义SQLITE_CONFIG_STMTJRNL_SPILL 26 / * int nByte * /
#定义SQLITE_CONFIG_SMALL_MALLOC 27 / *布尔值* /
#定义SQLITE_CONFIG_SORTERREF_SIZE 28 / * int nByte * /
#定义SQLITE_CONFIG_MEMDB_MAXSIZE 29 / * sqlite3_int64 * /

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

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

SQLITE_CONFIG_SINGLETHREAD
此选项没有参数。此选项将 线程处理模式设置为“单线程”。换句话说,它禁用所有的静音,并将SQLite置于只能由单个线程使用的模式。如果使用SQLITE_THREADSAFE = 0的编译时选项编译SQLite ,则无法将线程模式从其默认值Single-thread更改,因此sqlite3_config()如果使用SQLITE_CONFIG_SINGLETHREAD配置选项进行调用,将返回 SQLITE_ERROR

SQLITE_CONFIG_MULTITHREAD
此选项没有参数。此选项将 线程处理模式设置为多线程。换句话说,它禁用数据库连接和预准备语句对象上的静音。该应用程序负责序列化对数据库连接准备好的语句的访问 。但是启用了其他互斥锁,因此只要没有两个线程尝试同时使用同一数据库连接,SQLite就可以安全地在多线程环境中使用 。如果使用SQLITE_THREADSAFE = 0的编译时选项编译SQLite ,则无法设置多线程线程模式如果使用SQLITE_CONFIG_MULTITHREAD配置选项调用,sqlite3_config()将返回SQLITE_ERROR

SQLITE_CONFIG_SERIALIZED
此选项没有参数。此选项将 线程处理模式设置为“序列化”。换句话说,此选项启用所有互斥锁,包括数据库连接准备好的语句对象上的递归互斥锁。在这种模式下(这是使用SQLITE_THREADSAFE = 1编译SQLite时的默认设置 ),SQLite库本身将序列化对数据库连接预处理语句的访问,以便应用程序可以在不同线程中自由使用相同的数据库连接或相同的预处理语句。同时。如果使用SQLITE_THREADSAFE = 0编译SQLite编译时选项,则无法设置序列化线程模式, 如果使用SQLITE_CONFIG_SERIALIZED配置选项调用,则sqlite3_config()将返回SQLITE_ERROR

SQLITE_CONFIG_MALLOC
SQLITE_CONFIG_MALLOC选项采用单个参数,该参数是指向sqlite3_mem_methods结构实例的指针。该参数指定替代性的低级内存分配例程,以代替内置在SQLite中的内存分配例程。在sqlite3_config()调用返回之前,SQLite会为sqlite3_mem_methods结构的内容创建自己的私有副本。

SQLITE_CONFIG_GETMALLOC
SQLITE_CONFIG_GETMALLOC选项采用一个参数,该参数是指向sqlite3_mem_methods结构实例的指针。该sqlite3_mem_methods 结构填充有当前定义的存储器分配例程。例如,此选项可用于通过包装器使默认内存分配例程过载,该包装器可模拟内存分配失败或跟踪内存使用情况。

SQLITE_CONFIG_SMALL_MALLOC
SQLITE_CONFIG_SMALL_MALLOC选项采用类型为int的单个参数,该参数被解释为布尔值。如果为true,则为SQLite提供一个提示,即应尽可能避免分配大量内存。如果可以自由分配大量内存,SQLite的运行速度会更快,但是某些应用程序可能更喜欢以较慢的速度运行,以换取有关内存碎片的保证,如果避免了大分配,则可以保证。该提示通常是关闭的。

SQLITE_CONFIG_MEMSTATUS
SQLITE_CONFIG_MEMSTATUS选项采用类型为int的单个参数(解释为布尔值),该参数启用或禁用内存分配统计信息的收集。禁用内存分配统计信息后,以下SQLite接口将无法使用: 除非使用SQLITE_DEFAULT_MEMSTATUS = 0编译SQLite,否则默认情况下将启用内存分配统计信息,在这种情况下,默认情况下将禁用内存分配统计信息。

SQLITE_CONFIG_SCRATCH
SQLITE_CONFIG_SCRATCH选项不再使用。

SQLITE_CONFIG_PAGECACHE
SQLITE_CONFIG_PAGECACHE选项指定SQLite可用于具有默认页面缓存实现的数据库页面缓存的内存池。如果使用SQLITE_CONFIG_PCACHE2加载了应用程序定义的页面缓存实现,则此配置选项为no-op 。SQLITE_CONFIG_PAGECACHE有三个参数:指向8字节对齐内存(pMem)的指针,每页高速缓存行的大小(sz)和高速缓存行的数量(N)。sz参数应为最大数据库页面的大小(512和65536之间的2的幂)加上每个页面标题的一些额外字节。页面标题所需的额外字节数可以使用SQLITE_CONFIG_PCACHE_HDRSZ确定。除了浪费的内存外,sz参数大于必需的值是无害的。pMem参数必须是NULL指针或指向至少sz * N字节的8字节对齐内存块的指针,否则未定义后续行为。当pMem不为NULL时,SQLite将努力使用提供的内存来满足页面缓存的需要,如果页面缓存行大于sz字节或所有pMem缓冲区都已用尽,则将使用sqlite3_malloc()。如果pMem为NULL且N为非零,则每个数据库连接都会从sqlite3_malloc()对页面高速缓存进行一次初始大容量分配。如果N为正,则足以用于N个高速缓存行;如果N为负,则足以-1024 * N字节。如果除了初始分配所提供的内存之外,还需要其他页面缓存,则对于每个额外的缓存行,SQLite都会分别转到sqlite3_malloc()

SQLITE_CONFIG_HEAP
SQLITE_CONFIG_HEAP选项指定一个静态内存缓冲区,SQLite将使用该静态内存来满足其除SQLITE_CONFIG_PAGECACHE所提供的所有动态内存分配需求。仅当使用SQLITE_ENABLE_MEMSYS3SQLITE_ENABLE_MEMSYS5编译SQLite并返回 SQLITE_ERROR时,SQLITE_CONFIG_HEAP选项才可用。SQLITE_CONFIG_HEAP有三个参数:指向内存的8字节对齐指针,内存缓冲区中的字节数以及最小分配大小。如果第一个指针(内存指针)为NULL,则SQLite还原为使用其默认内存分配器(系统malloc()实现),撤消SQLITE_CONFIG_MALLOC的任何先前调用。如果内存指针不为NULL,则使用备用内存分配器来处理所有SQLite内存分配需求。第一个指针(内存指针)必须与8字节边界对齐,否则SQLite的后续行为将不确定。最小分配大小上限为2 ** 12。最小分配大小的合理值是2 ** 5到2 ** 8。

SQLITE_CONFIG_MUTEX
SQLITE_CONFIG_MUTEX选项采用单个参数,该参数是指向sqlite3_mutex_methods结构实例的指针。该参数指定用于替代内置在SQLite中的互斥例程的其他低级互斥例程。在调用sqlite3_config()返回之前,SQLite会复制sqlite3_mutex_methods结构 的内容。如果使用SQLITE_THREADSAFE = 0的编译时选项编译SQLite,则整个生成子系统将被省略,因此使用SQLITE_CONFIG_MUTEX配置选项调用 sqlite3_config()将返回SQLITE_ERROR

SQLITE_CONFIG_GETMUTEX
SQLITE_CONFIG_GETMUTEX选项采用一个参数,该参数是指向sqlite3_mutex_methods结构实例的指针。该 sqlite3_mutex_methods 结构充满了当前定义的互斥程序。例如,此选项可用于通过包装器重载默认的互斥量分配例程,该包装器用于跟踪互斥量的使用情况,以进行性能分析或测试。如果使用SQLITE_THREADSAFE = 0的编译时选项编译SQLite,则整个生成子系统将被省略,因此使用SQLITE_CONFIG_GETMUTEX配置选项调用 sqlite3_config()将返回SQLITE_ERROR

SQLITE_CONFIG_LOOKASIDE
SQLITE_CONFIG_LOOKASIDE选项采用两个参数来确定每个数据库连接上后备内存的默认大小。第一个参数是每个后备缓冲区插槽的大小,第二个参数是分配给每个数据库连接的插槽数。SQLITE_CONFIG_LOOKASIDE设置默认后备大小。sqlite3_db_config()SQLITE_DBCONFIG_LOOKASIDE 选项可用于更改单个连接上的后备配置。

SQLITE_CONFIG_PCACHE2
SQLITE_CONFIG_PCACHE2选项采用单个参数,该参数是指向sqlite3_pcache_methods2对象的指针。该对象指定自定义页面缓存实现的接口。SQLite复制sqlite3_pcache_methods2对象。

SQLITE_CONFIG_GETPCACHE2
SQLITE_CONFIG_GETPCACHE2选项采用单个参数,该参数是指向sqlite3_pcache_methods2对象的指针。当前页面缓存实现的SQLite副本到该对象中。

SQLITE_CONFIG_LOG
SQLITE_CONFIG_LOG选项用于配置SQLite全局错误日志。(SQLITE_CONFIG_LOG选项带有两个参数:指向具有void(*)(void *,int,const char *)的调用签名的函数的指针和指向void的指针。如果函数指针不为NULL,则将其调用。通过sqlite3_log()处理每个日志事件。如果函数指针为NULL,则sqlite3_log()接口变为no-op。作为SQLITE_CONFIG_LOG的第二个参数的void指针作为第一个参数传递给应用程序定义的logger函数的第二个参数是第一个参数到相应的sqlite3_log()调用的副本, 旨在作为一个结果代码扩展结果代码。传递给记录器的第三个参数是通过sqlite3_snprintf()格式化后的日志消息。SQLite日志记录接口不是可重入的;应用程序提供的记录器功能不得调用任何SQLite接口。在多线程应用程序中,应用程序定义的记录器功能必须是线程安全的。

SQLITE_CONFIG_URI
SQLITE_CONFIG_URI选项采用int类型的单个参数。如果非零,则全局启用URI处理。如果参数为零,则全局禁用URI处理。如果全局启用了URI处理,则无论打开数据库连接时是否设置了SQLITE_OPEN_URI标志,传递给sqlite3_open()sqlite3_open_v2()sqlite3_open16()或作为ATTACH命令的一部分指定的所有文件名都将解释为URI。。如果全局禁用它,则当打开数据库连接时设置了SQLITE_OPEN_URI标志时,文件名仅被解释为URI。默认情况下,URI处理是全局禁用的。可以通过使用 定义了SQLITE_USE_URI符号。

SQLITE_CONFIG_COVERING_INDEX_SCAN
SQLITE_CONFIG_COVERING_INDEX_SCAN选项采用单个整数参数,该参数被解释为布尔值,以便为查询优化器中的全表扫描启用或禁用覆盖索引。默认设置由SQLITE_ALLOW_COVERING_INDEX_SCAN编译时选项确定,如果省略该编译时选项,则为“ on”。禁用对全表扫描使用覆盖索引的能力是因为启用优化后,某些编码错误的旧版应用程序可能会发生故障。提供禁用优化的功能,即使使用较新版本的SQLite,较旧且有错误的应用程序代码也可以正常工作。

SQLITE_CONFIG_PCACHE和SQLITE_CONFIG_GETPCACHE
这些选项已过时,新代码不应使用。保留它们是为了向后兼容,但现在是禁止操作。

SQLITE_CONFIG_SQLLOG
仅当使用SQLITE_ENABLE_SQLLOG编译sqlite时,此选项才可用 定义了预处理器宏。第一个参数应该是指向void(*)(void *,sqlite3 *,const char *,int)类型的函数的指针。第二个应为(void *)类型。库在三种不同的情况下调用回调,这些情况由作为第四个参数传递的值标识。如果第四个参数为0,则刚刚打开作为第二个参数传递的数据库连接。第三个参数指向包含主数据库文件名称的缓冲区。如果第四个参数为1,则刚刚执行了第三个参数指向的SQL语句。或者,如果第四个参数为2,则在关闭第二个参数时正在传递的连接。在这种情况下,将第三个参数传递为NULL。在“ test_sqllog.c”中可以看到使用此配置选项的示例。

SQLITE_CONFIG_MMAP_SIZE
SQLITE_CONFIG_MMAP_SIZE接受两个64位整数(sqlite3_int64)值,它们是默认的mmap大小限制(PRAGMA mmap_size的默认设置 )和最大允许的mmap大小限制。每个数据库连接都可以使用PRAGMA mmap_size命令或使用 SQLITE_FCNTL_MMAP_SIZE文件控件来覆盖默认设置。如有必要,最大允许的mmap大小将被静默截断,以使其不超过SQLITE_MAX_MMAP_SIZE编译时选项设置的编译时最大mmap大小 。如果此选项的任何一个参数均为负,则将该参数更改为其编译时默认值。

SQLITE_CONFIG_WIN32_HEAPSIZE
只有在为SQLite定义了SQLITE_WIN32_MALLOC预处理程序宏的Windows编译SQLite时,SQLITE_CONFIG_WIN32_HEAPSIZE选项才可用。SQLITE_CONFIG_WIN32_HEAPSIZE采用32位无符号整数值,该值指定创建的堆的最大大小。

SQLITE_CONFIG_PCACHE_HDRSZ
SQLITE_CONFIG_PCACHE_HDRSZ选项采用一个参数,该参数是一个指向整数的指针,并将SQLITE_CONFIG_PAGECACHE中每页所需的每页额外字节数写入该整数。所需的额外空间量可能会根据编译器,目标平台和SQLite版本而变化。

SQLITE_CONFIG_PMASZ
SQLITE_CONFIG_PMASZ选项采用单个参数(它是无符号整数),并将多线程排序器的“最小PMA大小”设置为该整数。默认的最小PMA大小由 SQLITE_SORTER_PMASZ编译时选项设置。当启用多线程排序(使用PRAGMAthreads命令)并且要排序的内容量超过页面大小乘PRAGMA cache_size设置和该值的最小值时,将 启动新线程来帮助进行排序操作。

SQLITE_CONFIG_STMTJRNL_SPILL
SQLITE_CONFIG_STMTJRNL_SPILL选项采用单个参数,该参数成为语句日志溢出到磁盘的阈值。 语句日志会保留在内存中,直到它们的大小(以字节为单位)超过此阈值为止,此时它们将被写入磁盘。或者,如果阈值为-1,则语句日志始终仅保留在内存中。由于许多语句日志永远不会变大,因此将溢出阈值设置为64KiB之类的值可以大大减少支持语句回滚所需的I / O量。此设置的默认值由 SQLITE_STMTJRNL_SPILL编译时选项控制。

SQLITE_CONFIG_SORTERREF_SIZE
SQLITE_CONFIG_SORTERREF_SIZE选项接受类型(int)的单个参数-排序器引用大小阈值的新值。通常,当SQLite使用外部排序根据ORDER BY子句对记录进行排序时,调用者所需的所有字段都将出现在排序的记录中。但是,如果SQLite根据表列的声明类型确定其值可能非常大-大于配置的排序器引用大小阈值-则将引用存储在每个排序记录中,并从其中加载所需的列值记录将按排序顺序返回数据库。此选项的默认值是从不使用此优化。为该选项指定一个负值将恢复默认行为。仅当使用SQLite编译SQLite时,此选项才可用。 SQLITE_ENABLE_SORTER_REFERENCES编译时选项。

SQLITE_CONFIG_MEMDB_MAXSIZE
SQLITE_CONFIG_MEMDB_MAXSIZE选项接受单个参数 sqlite3_int64参数,该参数是使用sqlite3_deserialize()创建的内存数据库的默认最大大小。可以使用SQLITE_FCNTL_SIZE_LIMIT 文件控件向上或向下调整单个数据库的默认最大大小 。如果从不使用此配置设置,则默认最大值由SQLITE_MEMDB_DEFAULT_MAXSIZE编译时选项确定。如果未设置该编译时选项,则默认最大值为1073741824。

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