Obtaining SQL Values
const void *sqlite3_value_blob(sqlite3_value*);
double sqlite3_value_double(sqlite3_value*);
int sqlite3_value_int(sqlite3_value*);
sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
void *sqlite3_value_pointer(sqlite3_value*, const char*);
const unsigned char *sqlite3_value_text(sqlite3_value*);
const void *sqlite3_value_text16(sqlite3_value*);
const void *sqlite3_value_text16le(sqlite3_value*);
const void *sqlite3_value_text16be(sqlite3_value*);
int sqlite3_value_bytes(sqlite3_value*);
int sqlite3_value_bytes16(sqlite3_value*);
int sqlite3_value_type(sqlite3_value*);
int sqlite3_value_numeric_type(sqlite3_value*);
概要:
sqlite3_value_blob
→
BLOB value
sqlite3_value_double
→
REAL value
sqlite3_value_int
→
32-bit INTEGER value
sqlite3_value_int64
→
64-bit INTEGER value
sqlite3_value_pointer
→
Pointer value
sqlite3_value_text
→
UTF-8 TEXT value
sqlite3_value_text16
→
UTF-16 TEXT value in the native byteorder
sqlite3_value_text16be
→
UTF-16be TEXT value
sqlite3_value_text16le
→
UTF-16le TEXT value
sqlite3_value_bytes
→
Size of a BLOB or a UTF-8 TEXT in bytes
sqlite3_value_bytes16
→
Size of UTF-16 TEXT in bytes
sqlite3_value_type
→
Default datatype of the value
sqlite3_value_numeric_type
→
Best numeric datatype of the value
细节:
这些例程从受保护的 sqlite3_value 对象中提取类型,大小和内容信息。受保护的 sqlite3_value 对象用于将参数信息传递到应用程序定义的 SQL 函数和虚拟表的实现中。
这些例程仅适用于受保护的 sqlite3_value 对象。任何尝试在不受保护的 sqlite3_value 上使用这些例程都不是线程安全的。
这些例程与相应的列访问函数一样工作,只不过这些例程只使用一个受保护的 sqlite3_value 对象指针而不是 sqlite3_stmt * 指针和一个整数列号。
sqlite3_value_text16()接口以主机的本机字节顺序提取 UTF-16字符串。sqlite3_value_text16be()和 sqlite3_value_text16le()接口分别将 UTF-16 字符串提取为 big-endian 和 little-endian。
如果使用 sqlite3_bind_pointer(S,I,P,X,D)或 sqlite3_result_pointer(C,P,X,D)初始化 sqlite3_value 对象 V,并且如果 X 和 Y 是根据 strcmp(X,Y)比较相等的字符串,则 sqlite3_value_pointer(V,Y)将返回指针 P. 否则, sqlite3_value_pointer(V,Y)将返回 NULL。sqlite3_bind_pointer()例程是为 SQLite 3.20.0 添加的指针传递接口的一部分。
sqlite3_value_type(V)接口返回 sqlite3_value 对象 V 的初始数据类型的数据类型代码。返回的值是 SQLITE_INTEGER,SQLITE_FLOAT,SQLITE_TEXT,SQLITE_BLOB 或 SQLITE_NULL 中的一个。其他接口可能会更改 sqlite3_value 对象的数据类型。例如,如果数据类型最初调用 SQLITE_INTEGER 和 sqlite3_value_text(V) 以提取该整数的文本值,则对sqlite3_value_type(V)的后续调用可能会返回 SQLITE_TEXT。是否发生持久性内部数据类型转换是未定义的,并可能从一个 SQLite 版本更改为下一个。
sqlite3_value_numeric_type()接口尝试将数值亲和力应用于该值。这意味着尝试将该值转换为整数或浮点数。如果这样的转换是可能的而不丢失信息(换句话说,如果该值是看起来像数字的字符串),则执行转换。否则,不会发生转换。转换后的数据类型被返回。
请特别注意,从 sqlite3_value_blob(),sqlite3_value_text()或 sqlite3_value_text16() 返回的指针可以通过对 sqlite3_value_bytes(),sqlite3_value_bytes16(),sqlite3_value_text() 或 sqlite3_value_text16()的后续调用使其失效。
这些例程必须从与提供 sqlite3_value * 参数的 SQL 函数相同的线程中调用。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com