在上面的模板中,NNN表示一个整数,VVV表示一个字母数字标识符。这些参数的值(也称为“主机参数名称”或“SQL参数”)可以使用
sqlite3_bind_
*函数设置。
C / C ++语法
int sqlite3_bind_blob(
sqlite3_stmt*,
const void*,
int n,
void(*)(void*)
[in]要设置的SQL参数的索引。最左边的SQL参数的索引为1。当使用相同的命名SQL参数多次,第二次和后续出现与第一次出现相同的索引。如果需要,可以使用
sqlite3_bind_parameter_index
API查询命名参数的索引。“?NNN”参数的索引是NNN的值。NNN值必须介于1和
sqlite3_limit
参数SQLITE_LIMIT_VARIABLE_NUMBER之间(默认值:999)。
pValue
[in]绑定到参数的值。
numBytes
[in]参数中的字节数。要清楚:值是值中的字节数,而不是字符数。
pDestructor
[in]在SQLite完成之后,用于处理BLOB的析构函数。即使调用
sqlite3_bind_blob
失败,调用析构函数来处理BLOB。如果这个参数是特殊值
SQLITE_STATIC
,则SQLite假定信息是静态的,非管理的空间,不需要被释放。如果此参数的值为
SQLITE_TRANSIENT
,那么在
sqlite3_bind_blob
函数返回之前,SQLite会立即自己创建数据的私有副本。
SQLITE_OK成功或错误代码如果出现问题。如果参数索引超出范围,则返回SQLITE_RANGE。如果
的malloc
失败,则返回SQLITE_NOMEM。
如果
sqlite3_bind_blob
调用了准备语句的NULL指针,或者调用了比
sqlite3_reset
更近调用了
sqlite3_step
的准备语句,则调用将返回SQLITE_MISUSE。如果
sqlite3_bind_blob
通过已经完成的准备语句,则结果是未定义的,可能是有害的。
sqlite3_reset
功能不会清除绑定。Unbound参数被解释为NULL。
C ++实现代码
** Bind a text or BLOB value.
static int bindText(
sqlite3_stmt *pStmt, /* The statement to bind against */
int i, /* Index of the parameter to bind */
const void *zData, /* Pointer to the data to be bound */
int nData, /* Number of bytes of data to be bound */
void (*xDel)(void*), /* Destructor for the data */
u8 encoding /* Encoding for the data */
Vdbe *p = (Vdbe *)pStmt;
Mem *pVar;
int rc;
rc = vdbeUnbind(p, i);
if( rc==SQLITE_OK ){
if( zData!=0 ){
pVar = &p->aVar[i-1];
rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
if( rc==SQLITE_OK && encoding!=0 ){
rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
sqlite3Error(p->db, rc, 0);
rc = sqlite3ApiExit(p->db, rc);
sqlite3_mutex_leave(p->db->mutex);
}else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
xDel((void*)zData);
return rc;
** Bind a blob value to an SQL statement variable.
SQLITE_API int sqlite3_bind_blob(
sqlite3_stmt *pStmt,
int i,
const void *zData,
int nData,
void (*xDel)(void*)
return bindText(pStmt, i, zData, nData, xDel, 0);