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

SQLite C接口

检查数据库

int sqlite3_wal_checkpoint_v2(sqlite3*db,/*数据库句柄*/const char*zDb,/*附加数据库的名称(或NULL)*/int eMode,/*SQLITE_CHECKPOINT_*值*/int*pnLog,/*OUT:WAL日志的大小(以帧为单位)*/int*pnCkpt/*OUT:检查点的总帧数*/);

sqlite3_wal_checkpoint_v2(D,X,M,L,C)接口运行检查点对数据库X的操作数据库连接D处于模式M。状态信息被写回L和C指向的整数。M参数必须有效检查站模式:

SQLITE_CHECKPOINT_PASSIVE(SQLITE_检查点_被动)
在不等待任何数据库的情况下,检查尽可能多的帧读取器或写入器完成,然后同步数据库文件(如果所有帧)日志中有检查点。这个busy-handler回调从不在SQLITE_CHECKPOINT_PASSIVE模式下调用。另一方面,被动模式可能会使检查点未完成如果有并发的读者或作者。

SQLITE_CHECKPOINT_FULL(SQLITE_CHECKPOINT_FULL)
此模式阻塞(它调用busy-handler回调)直到没有数据库编写器和所有读者正在读取最新的数据库快照。然后,它检查日志文件中的所有帧,并同步数据库文件。此模式在挂起时阻止新的数据库写入程序,但新的数据库阅读器可以不受阻碍地继续使用。

SQLITE_CHECKPOINT_RESTART(SQLITE_检查点_重新启动)
此模式的工作方式与SQLITE_CHECKPOINT_FULL相同,但添加了在检查指向日志文件后,它会阻止(调用busy-handler回调)直到所有读卡器都只读取数据库文件。这确保了下一个写入程序将从头开始重新启动日志文件。与SQLITE_CHECKPOINT_FULL一样,此模式会阻止新的数据库写入程序在挂起时尝试,但不会妨碍读取程序。

SQLITE_CHECKPOINT_TRUNCATE(SQLITE_检查点_运行)
此模式的工作方式与SQLITE_CHECKPOINT_RESTART相同此外,它还将之前的日志文件截断为零字节成功回归。

如果pnLog不为NULL,则*pnLog设置为如果检查点由于以下原因无法运行,则将日志文件或设置为-1错误或数据库不在WAL模式。如果pnCkpt不是NULL,则*pnCkpt设置为日志文件(包括函数之前已经检查过的任何日志文件如果检查点由于错误或因为数据库未处于WAL模式。注意,成功后完成SQLITE_CHECKPOINT_TRUNCATE后,日志文件将截断为零字节,因此*pnLog和*pnCkpt都将设置为零。

所有调用都会在数据库文件上获得一个独占的“检查点”锁。如果任何其他进程同时运行检查点操作无法获取锁,并返回SQLITE_BUSY。即使有繁忙处理程序配置,在这种情况下将不会调用它。

SQLITE_CHECKPOINT_FULL、RESTART和TRUNCATE模式还获得数据库文件上的独占“writer”锁。如果写入器锁不能立即获取,配置busy-handler,调用它并写入器锁将重试,直到busy-handler返回0或锁成功获得。在等待时也会调用busy-handler如上所述的数据库读取器。如果busy-handler在之前返回0获取writer锁,或者在等待数据库读取器时检查点操作从该点开始的方式与SQLITE_CHECKPOINT_PASSIVE-检查点尽可能多的帧没有任何阻碍。在本例中返回SQLITE_BUSY。

如果参数zDb为NULL或指向零长度字符串,则尝试对所有WAL数据库执行指定的操作附属的数据库连接数据库。在这种情况下写入输出参数*pnLog和*pnCkpt的值未定义。如果处理一个或多个已连接WAL数据库,仍在尝试对任何剩余的附加的数据库和SQLITE_BUSY在末尾返回。如果有其他处理附加数据库时出错,放弃处理并立即将错误代码返回给调用者。如果没有错误处理附加的数据库,则返回SQLITE_OK。

如果数据库zDb是不在WAL中的附加数据库的名称模式下,返回SQLITE_OK,并且*pnLog和*pnCkpt都设置为-1。如果zDb不是NULL(或零长度字符串),并且不是任何附加数据库SQLITE_ERROR返回给调用者。

除非返回SQLITE_MISUSE,sqlite3_wal_checkpoint_v2()接口设置查询的错误信息sqlite3_errcode()sqlite3_errmsg().

这个PRAGMA wal_检查点命令可用于调用此接口来自SQL。

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