Small. Fast. Reliable.
Choose any three.

SQLite C接口

方便的运行查询例程

int sqlite3_get_table(
  sqlite3 * db,/ *打开的数据库* /
  const char * zSql,/ *要求值的SQL * /
  char *** pazResult,/ *查询结果* /
  int * pnRow,/ *此处写入的结果行数* /
  int * pnColumn,/ *此处写入的结果列数* /
  char ** pzErrmsg / *此处写的错误消息* /
);
void sqlite3_free_table(char ** result);

这是一个旧接口,保留该接口是为了向后兼容。不建议使用此接口。

定义:结果表是由sqlite3_get_table()接口创建的内存数据结构 。结果表记录一个或多个查询的完整查询结果。

该表在概念上具有许多行和列。但是这些数字不是结果表本身的一部分。这些数字是单独获得的。令N为行数,M为列数。

结果表是指向以零结尾的UTF-8字符串的指针的数组。数组中有(N + 1)* M个元素。前M个指针指向包含列名称的零终止字符串。其余条目均指向查询结果。NULL值导致NULL指针。所有其他值均以sqlite3_column_text()返回的UTF-8零终止字符串表示形式表示。

结果表可能包含一个或多个内存分配。将结果表直接传递到sqlite3_free()是不安全的。应该使用sqlite3_free_table()释放结果表。

作为结果表格式的示例,假设查询结果如下:

姓名| 年龄
-----------------------
爱丽丝| 43
鲍勃| 28岁
辛迪 21岁

有两列(M == 2)和三行(N == 3)。因此,结果表具有8个条目。假设结果表存储在名为azResult的数组中。然后azResult保留以下内容:

azResult [0] =“名称”;
azResult [1] =“年龄”;
azResult [2] =“爱丽丝”;
azResult [3] =“ 43”;
azResult [4] =“鲍勃”;
azResult [5] =“ 28”;
azResult [6] =“辛迪”;
azResult [7] =“ 21”;

sqlite3_get_table()函数在其第二个参数的以零结尾的UTF-8字符串中计算一个或多个用分号分隔的SQL语句,并将结果表返回到其第三个参数中给出的指针。

应用程序完成来自sqlite3_get_table()的结果后,它必须将结果表指针传递给sqlite3_free_table()才能释放已分配的内存。由于sqlite3_malloc()sqlite3_get_table()中发生的方式 ,调用函数不得尝试直接调用sqlite3_free()。只有 sqlite3_free_table()才能正确安全地释放内存。

sqlite3_get_table()接口被实现为sqlite3_exec()的包装器 。sqlite3_get_table()例程无法访问SQLite的任何内部数据结构。它仅使用此处定义的公共接口。结果,内部sqlite3_exec()调用外部的包装层中发生的错误不会反映在后续对sqlite3_errcode()sqlite3_errmsg()的调用中。

另请参见 对象常量函数的列表