int sqlite3_db_cacheflush(sqlite3*);
如果在调用 数据库连接 D 上打开了一个写事务时调用了 sqlite3_db_cacheflush(D) 接口,则页面缓存中任何当前未使用的脏页面都将写入磁盘。如果由活动 SQL 语句创建的数据库游标正在读取脏页面,或者它是数据库文件的第 1 页(第 1 页始终“正在使用”),则该脏页面可能正在使用。 sqlite3_db_cacheflush(D) 接口会刷新所有模式的缓存 - “main”、“temp”以及任何 附加 的数据库。
如果此函数需要在脏页面可以刷新到磁盘之前获取额外的数据库锁,则会这样做。如果无法立即获取这些锁并且配置了繁忙处理程序回调,则会以通常的方式调用它。如果仍然无法获取所需的锁,则跳过该数据库,并尝试刷新属于下一个(如果有)数据库的任何脏页面。如果由于无法获取锁而跳过了任何数据库,但没有发生其他错误,则此函数返回 SQLITE_BUSY。
如果在将脏页面刷新到磁盘时发生任何其他错误(例如 IO 错误或内存不足情况),则会立即放弃处理并向调用方返回 SQLite 错误代码。
否则,如果未发生错误,sqlite3_db_cacheflush() 将返回 SQLITE_OK。
此函数不会设置由 sqlite3_errcode() 和 sqlite3_errmsg() 函数返回的数据库句柄错误代码或消息。