描述
将列值作为blob返回。
C / C ++语法
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); |
PB语法
FUNCTION sqlite3_column_blob ( _ BYVAL hStmt AS DWORD, _ BYVAL nCol AS LONG _ ) AS DWORD |
参数
pStmt
[in]语句句柄。
nCol
[in]应返回信息的列的索引。结果集的最左列有索引0。结果中的列数可以使用sqlite3_column_count确定。
返回值
列值作为指向blob的指针。
备注
如果SQL语句当前没有指向有效的行,或者如果列索引超出范围,则结果是未定义的。sqlite3_column_int只能在最近调用sqlite3_step已返回SQLITE_ROW时调用,而且以后不再调用sqlite3_reset或sqlite3_finalize.如果在sqlite3_reset或sqlite3_finalize之后或在sqlite3_step返回了除了SQLITE_ROW之外的任何其他函数中调用了这些函数,则结果未定义。如果sqlite3_step或sqlite3_reset或sqlite3_finalize在sqlite3_column_blob待处理之前从其他线程调用,则结果未定义。
零长度BLOB的sqlite3_column_blob的返回值为NULL指针。
sqlite3_column_blob尝试在适当的时候转换值。下表详细说明了所应用的转化:
内部类型 |
请求类型 |
转变 |
NULL |
BLOB |
结果是NULL指针 |
INTEGER |
BLOB |
使用atoi() |
FLOAT |
BLOB |
使用atof() |
TEXT |
BLOB |
不用找了 |
上面的表格参考了标准C库函数atoi()和atof()。SQLite并没有真正使用这些功能。它具有自己的等效内部功能。为了简洁起见,在表中使用了atoi()和atof()名称,因为它们是大多数C程序员熟悉的。
返回的指针在sqlite3_step或sqlite3_reset或sqlite3_finalize被调用之前有效。用于保存BLOB的内存空间将自动释放。不要将sqlite3_column_blob返回的指针传递给sqlite3_free.
如果在评估任何这些功能时发生内存分配错误,则返回默认值。默认值为NULL指针。对sqlite3_errcode的后续调用将返回SQLITE_NOMEM。
C ++实现代码
SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
const void *val;
val = sqlite3_value_blob( columnMem(pStmt,i) );
/* Even though there is no encoding conversion, value_blob() might
** need to call malloc() to expand the result of a zeroblob()
** expression.
*/
columnMallocFailure(pStmt);
return val;
}