添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在上面的模板中,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);