为什么不推荐SQLite C接口中的sqlite3_get_table接口

Why the interface sqlite3_get_table in SQLite C Interface is not recommended

本文关键字:接口 sqlite3 get table SQLite 为什么不      更新时间:2023-10-16

sqlite3_get_table定义如下:

int sqlite3_get_table(
  sqlite3 *db,          /* An open database */
  const char *zSql,     /* SQL to be evaluated */
  char ***pazResult,    /* Results of the query */
  int *pnRow,           /* Number of result rows written here */
  int *pnColumn,        /* Number of result columns written here */
  char **pzErrmsg       /* Error msg written here */
);

正如文档中所说,它可以方便地获得结果表,并作为sqlite3_exec()的包装实现。

但现在不推荐:

这是为了向后兼容而保留的遗留接口。不建议使用此接口。

但是如果我使用sqlite3_exec,我需要写一个额外的回调函数。它更复杂。

所以我的问题是这个接口的主要问题是什么?为什么需要弃用它?

详细信息见http://www.sqlite.org/c3ref/free_table.html

sqlite3_get_table的问题是所有值都转换为字符串,并且必须为所有结果记录分配内存。

您应该使用sqlite3_prepare_v2/sqlite3_step/sqlite3_column_xxx/sqlite3_finalize函数