XServer 语境注意事项
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。
sqlite3_exec 执行
一步执行无结果 SQL(建表、PRAGMA、简单写)——demo 的建表路径。
sqlite3_errmsg / sqlite3_errcode 诊断
错误文本与码——排错第一站(demo 在打开失败时打印)。
语句五步(参数化查询主干)
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 官方文档。