sqlite:如何获取所选列的列ID?

时间:2012-01-17 21:29:31

标签: c++ sqlite

假设:

  • 带有表T
  • 的sqlite数据库
  • T包含10列 - C0C1 ... C9
  • sqlite3_stmt
  • 对应的select C3,C2 from T指针

好的,我可以使用sqlite3_column_XXX系列方法(http://www.sqlite.org/capi3ref.html#sqlite3_column_blob)来获取所选列值,如下所示:

sqlite3_stmt *s;
sqlite3_prepare_v2(db, query, sizeof(query), &s, NULL);
while ((result = sqlite3_step(s)) == SQLITE_ROW)
{
  const char *v3 = reinterpret_cast<const char *>(sqlite3_column_text(s, 0);
  const char *v2 = reinterpret_cast<const char *>(sqlite3_column_text(s, 1);
}

我需要的是所选列的真实索引,即v3为3,v2为2。

动机:我希望能够将返回的字符串值解析为实际列类型。实际上,我的架构说c3datetime,sqlite将其视为TEXT。因此,sqlite3_column_type(s, 0)返回SQLITE3_TEXT,但表元数据(可从pragma table_info(T)获得)保留字符串datetime,这是列的预期类型。知道了,我可以将返回的字符串解析为自纪元以来的各个unix时间,例如。

但是如何将查询列索引映射到表列索引:

  • 查询第0列 - &gt;表第3栏
  • 查询第1列 - &gt;表格第2栏

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用sqlite C函数sqlite3_column_decltype从结果stmt中获取声明的列数据类型吗?它没有具体回答你的问题(得到原始专栏的索引),但可能是实现你需要的另一种方式吗?