C++ sqlite:如何获取所选列的列id?

C++ sqlite:如何获取所选列的列id?,c++,sqlite,C++,Sqlite,鉴于: 具有表T 表T包含10列-C0,C1C9 对应于从T中选择C3、C2的sqlite3\u stmt指针 好的,我可以使用sqlite3\u column\u XXX方法家族()获取所选列值,如下所示: sqlite3_stmt *s; sqlite3_prepare_v2(db, query, sizeof(query), &s, NULL); while ((result = sqlite3_step(s)) == SQLITE_ROW) { const char *v

鉴于:

  • 具有表
    T
  • T
    包含10列-
    C0
    C1
    <代码>C9
  • 对应于
    从T中选择C3、C2的
    sqlite3\u stmt
    指针
好的,我可以使用
sqlite3\u column\u XXX
方法家族()获取所选列值,如下所示:

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);
}
sqlite3\u stmt*s;
sqlite3\u prepare\u v2(数据库、查询、sizeof(查询)、&s、空);
而((结果=sqlite3_步骤))==SQLITE_行)
{
const char*v3=reinterpret\u cast(sqlite3\u column\u text(s,0);
const char*v2=reinterpret\u cast(sqlite3\u column\u text(s,1);
}
我需要的是所选列的实际索引,即3个用于
v3
,2个用于
v2

动机:我希望能够将返回的字符串值解析为真正的列类型。事实上,我的模式说
c3
datetime
,sqlite将其视为
TEXT
。因此,
sqlite3\u column\u类型(s,0)
返回
sqlite3\u TEXT
,但是表元数据(可从
pragma table_info(T)
获得)保留字符串
datetime
,这是列的预期类型。知道了它,我可以将返回的字符串解析为自历元以来的相应unix时间

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

  • 查询列0->表列3
  • 查询列1->表列2

谢谢。

您可以使用sqlite C函数从结果stmt获取声明的列数据类型?它没有明确回答您的问题(获取原始列的索引),但这可能是实现您所需的另一种方式?

您是否考虑过将此类信息嵌入到更高级别的关注点?从表栏中了解其查询foo的代码可以声明它希望从某个列中获取日期。否则,您依赖的是来自一个系统的内省,而这个系统并不是真正设计或预期的很好地支持它。