首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Obtaining SQL Values

代码语言:javascript
复制
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*);

概要:

代码语言:javascript
复制
 
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 函数相同的线程中调用。

扫码关注腾讯云开发者

领取腾讯云代金券