272 个导出符号 · SQLite 原生 API 全集(v3 接口族)

sqlite 扩展参考

构建变体 build.bat sqlite 编入:引擎静态链接进宿主,脚本 #include <sqlite3.h>(VFS 提供),demo 的 db/main.db 就是它驱动的。语义文档以 SQLite 官方为准——本页给 XServer 语境的分组索引与注意事项。

XServer 语境注意事项

多 worker 安全

demo 以 FULLMUTEX 模式打开(open_v2 标志),单句柄可被多个 worker 回调使用——但语句对象的跨线程复用仍应避免(prepare-后-finalize 尽量同线程)。

打开方式

demo 用 sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);路径相对应用目录(db/ 目录跨代共享,ch05)。

变体依赖

default 变体没有这些符号——脚本引用 sqlite3_* 会编译失败(ch02 练习实测过这个行为)。

连接与执行族

sqlite3_open_v2 / close / close_v2 连接

打开(标志控制读写/创建/线程模式)与关闭。demo 模式:READWRITE | CREATE + FULLMUTEX。

int sqlite3_open_v2(const char *filename, sqlite3 **ppDb, int flags, const char *zVfs); int sqlite3_close(sqlite3 *db);

sqlite3_exec 执行

一步执行无结果 SQL(建表、PRAGMA、简单写)——demo 的建表路径。

int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *arg, char **errmsg);

sqlite3_errmsg / sqlite3_errcode 诊断

错误文本与码——排错第一站(demo 在打开失败时打印)。

语句五步(参数化查询主干)

五步模式(demo database.h / item.h 实际用法)实机验证出处:demo-single/modules
sqlite3_stmt* pStmt = NULL;
/* 1. prepare:SQL 文本 → 语句对象(? 占位,杜绝注入)*/
sqlite3_prepare_v2(G_DB, sSQL, -1, &pStmt, NULL);
/* 2. bind:按序号绑定参数(文本用 SQLITE_TRANSIENT 拷贝)*/
sqlite3_bind_text(pStmt, 1, sName, -1, SQLITE_TRANSIENT);
sqlite3_bind_int64(pStmt, 2, iId);
/* 3. step:推进一行(SELECT)或执行(写入)*/
while ( sqlite3_step(pStmt) == SQLITE_ROW ) {
    /* 4. column:按列取值 */
    int64 iId = sqlite3_column_int64(pStmt, 0);
    const unsigned char* sName = sqlite3_column_text(pStmt, 1);
}
/* 5. finalize:释放语句——每条 prepare 必须有 finalize */
sqlite3_finalize(pStmt);

族成员:sqlite3_prepare_v2、sqlite3_bind_text/int64/int/double/null/blob、sqlite3_step、sqlite3_column_*、sqlite3_reset(语句复用)、sqlite3_finalize。绑定序号从 1 开始,列序号从 0 开始——两个差一是最常见笔误。

事务与批量族

  • BEGIN / COMMIT / ROLLBACK 经 exec 或语句执行;批量写入务必成组(demo 的 bench-write 批量插入就是事务包裹)
  • sqlite3_last_insert_rowid:自增主键回取
  • sqlite3_changes:受影响行数
  • 备份/恢复族(sqlite3_backup_*)在导出面内——热备脚本可直接用

工具族概览

导出共 272 符号,覆盖:核心 v3 接口、blob IO、blob 与文本工具、错误与状态、内存统计(sqlite3_memory_used 等)、运行时控制(sqlite3_limit / busy_timeout)、扩展加载禁用域等。完整清单见 VFS 内 /xs/sqlite3.h(仅 sqlite 变体存在);逐函数语义查 SQLite 官方文档。

教程侧的完整实战(连接管理、prepared statement 复用、事务批写、与热重载的句柄交接决策)在 第 32 章与 实战一。