在线文档教程
Sqlite
C界面 | C Interface

Obtaining SQL Values

获取 SQL 值

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 函数相同的线程中调用。