SQLite C 接口
数据库文件的低级控制
int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
sqlite3_file_control()接口直接调用与第二个参数标识的特定数据库关联的sqlite3_io_methods对象 的xFileControl 方法。数据库的名称对于主数据库是“main”,对于 TEMP 数据库是“temp”,或者对于使用ATTACH SQL 命令添加的数据库,名称是出现在 AS 关键字之后的名称。可以使用 NULL 指针代替“main”来引用主数据库文件。此例程的第三个和第四个参数直接传递给 xFileControl 方法的第二个和第三个参数。xFileControl 方法的返回值成为该例程的返回值。
sqlite3_file_control()的一些操作码由 SQLite 核心直接处理,从不调用 sqlite3_io_methods.xFileControl 方法。op 参数的SQLITE_FCNTL_FILE_POINTER值导致指向底层sqlite3_file对象的指针被写入第 4 个参数指向的空间。SQLITE_FCNTL_JOURNAL_POINTER的 工作方式类似,只是它返回与日志文件而不是主数据库关联的sqlite3_file对象。SQLITE_FCNTL_VFS_POINTER操作码返回指向文件底层sqlite3_vfs对象的指针。SQLITE_FCNTL_DATA_VERSION _从寻呼机返回数据版本计数器。
如果第二个参数 (zDbName) 与任何打开的数据库文件的名称不匹配,则返回 SQLITE_ERROR。此错误代码不会被记住,也不会被sqlite3_errcode() 或sqlite3_errmsg()调用。底层 xFileControl 方法也可能返回 SQLITE_ERROR。无法区分不正确的 zDbName 和底层 xFileControl 方法返回的 SQLITE_ERROR。
另见:文件控制操作码