You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sqlite3中是否有获取查询结果元数据的等效API函数?

SQLite3获取查询结果元数据的实现方式

SQLite3 提供了与 MySQL mysql_fetch_fields、mysql_num_fields 对等的API,完全支持获取查询结果集的列元数据,不需要拉取完所有数据行就能拿到相关信息。

核心API对应关系

  • 对应mysql_num_fields获取结果集总列数的接口:sqlite3_column_count(),入参为预编译语句句柄sqlite3_stmt*,返回值为int类型的列总数。
  • 对应mysql_fetch_fields获取单列元数据的是一组sqlite3_column_*系列函数,SQLite3没有提供一次性返回所有字段元数据数组的接口,需要按列索引从0开始遍历逐个获取属性。

等价代码示例

以下代码实现和给出的MySQL示例完全一致的列名打印逻辑:

sqlite3_stmt *stmt;
// 省略前置逻辑:调用sqlite3_prepare_v2预处理查询SQL、校验执行结果
int fieldsNum = sqlite3_column_count(stmt);

for (int i = 0; i < fieldsNum; i++) {
    const char* col_name = sqlite3_column_name(stmt, i);
    printf("column [%d] name: %s\n", i + 1, col_name);
}

常用元数据扩展接口

除了列名之外,还可以通过同系列接口拿到更丰富的列属性,所有接口第一个参数为sqlite3_stmt*句柄,第二个参数为列索引:

  • sqlite3_column_name():获取查询返回的列名,会返回AS别名后的名称,和MySQL fields[i].name 行为完全一致,无额外编译依赖
  • sqlite3_column_origin_name():获取列在原表中的真实字段名,不受查询语句里AS别名的影响,该接口需要编译SQLite时开启SQLITE_ENABLE_COLUMN_METADATA宏才可正常使用
  • sqlite3_column_table_name():获取列所属的源表名称,依赖上述相同编译宏
  • sqlite3_column_database_name():获取列所属的数据库名称,依赖上述相同编译宏
  • sqlite3_column_decltype():获取列建表时声明的字段类型,表达式计算生成的无来源列会返回NULL,无额外编译依赖
  • sqlite3_column_type():获取当前数据行中该列的实际存储类型,注意SQLite为动态类型系统,该接口需要在调用sqlite3_step()拿到有效数据行后调用才能返回正确结果

注意和MySQL接口的差异:SQLite3的结果元数据绑定在预编译语句sqlite3_stmt上,在sqlite3_prepare_v2执行成功后,还没开始拉取数据行时,就已经可以获取列数、列名、声明类型这类静态元数据。

内容的提问来源于stack exchange,提问作者mz mz02005

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:09:18