我想检测SQLite中任何SELECT
查询的列数据类型。
在 C API 中,有用于此目的的const char *sqlite3_column_decltype(sqlite3_stmt*,int)
。但这仅适用于实际表中的列。表达式(如LOWER('ABC')
(或来自查询的列(如PRAGMA foreign_key_list("mytable")
(始终返回此处null
。
我知道也有typeof(col)
,但我无法控制触发的 SQL,所以我需要一种方法从预准备语句中提取数据类型。
你正在寻找 sqlite3_column_type((:
sqlite3_column_type()
例程返回结果列的初始数据类型的数据类型代码。返回的值是SQLITE_INTEGER
、SQLITE_FLOAT
、SQLITE_TEXT
、SQLITE_BLOB
或SQLITE_NULL
之一。sqlite3_column_type()
的返回值可用于决定应使用前六个接口中的哪一个来提取列值。
请记住,在 sqlite 中,类型在很大程度上与值相关联,而不是与列相关联 - 不同的行可以在同一列中存储不同的类型。