Small. Fast. Reliable.
Choose any three.

SQLite C接口

将值绑定到准备好的语句

int sqlite3_bind_blob(sqlite3_stmt *,int,const void *,int n,void(*)(void *));
int sqlite3_bind_blob64(sqlite3_stmt *,int,const void *,sqlite3_uint64,
                        void(*)(void *));
int sqlite3_bind_double(sqlite3_stmt *,int,double);
int sqlite3_bind_int(sqlite3_stmt *,int,int);
int sqlite3_bind_int64(sqlite3_stmt *,int,sqlite3_int64);
int sqlite3_bind_null(sqlite3_stmt *,int);
int sqlite3_bind_text(sqlite3_stmt *,int,const char *,int,void(*)(void *));
int sqlite3_bind_text16(sqlite3_stmt *,int,const void *,int,void(*)(void *));
int sqlite3_bind_text64(sqlite3_stmt *,int,const char *,sqlite3_uint64,
                         void(*)(void *),无符号字符编码);
int sqlite3_bind_value(sqlite3_stmt *,int,const sqlite3_value *);
int sqlite3_bind_pointer(sqlite3_stmt *,int,void *,const char *,void(*)(void *));
int sqlite3_bind_zeroblob(sqlite3_stmt *,int,int n);复制代码
int sqlite3_bind_zeroblob64(sqlite3_stmt *,int,sqlite3_uint64);

在输入到sqlite3_prepare_v2()及其变体的SQL语句文本中,文字可以用与以下模板之一匹配的参数代替:

在上面的模板中,NNN代表整数文字,而VVV代表字母数字标识符。可以使用此处定义的sqlite3_bind _ *()例程来设置这些参数的值(也称为“主机参数名称”或“ SQL参数”)。

sqlite3_bind _ *()例程的第一个参数始终是指向从sqlite3_prepare_v2()或其变体返回的sqlite3_stmt对象 的指针。

第二个参数是要设置的SQL参数的索引。最左边的SQL参数的索引为1。当多次使用同一命名的SQL参数时,第二个及后续出现的索引与第一次出现的索引相同。如果需要,可以使用sqlite3_bind_parameter_index() API查找命名参数的索引 。“?NNN”参数的索引是NNN的值。NNN值必须介于1和sqlite3_limit() 参数SQLITE_LIMIT_VARIABLE_NUMBER之间(默认值:32766)。

第三个参数是绑定到该参数的值。如果sqlite3_bind_text()或sqlite3_bind_text16()或sqlite3_bind_blob()的第三个参数是NULL指针,则忽略第四个参数,最终结果与sqlite3_bind_null()相同。如果sqlite3_bind_text()的第三个参数不为NULL,则它应该是指向格式正确的UTF8文本的指针。如果sqlite3_bind_text16()的第三个参数不为NULL,则它应该是指向格式正确的UTF16文本的指针。如果sqlite3_bind_text64()的第三个参数不为NULL,则它应该是指向格式正确的unicode字符串的指针,如果第六个参数为SQLITE_UTF8,则该字符串为UTF8,否则为UTF16。

UTF16输入文本的字节顺序由第一个字符中的字节顺序标记(BOM,U + FEFF)确定,该字符被删除,或者在没有BOM的情况下,字节顺序是主机的本机字节顺序。 sqlite3_bind_text16()的计算机,或sqlite3_bind_text64()的第6个参数中指定的字节顺序。如果UTF16输入文本包含无效的Unicode字符,则SQLite可能会将那些无效的字符更改为Unicode替换字符:U + FFFD。

在具有第四个参数的例程中,其值是参数中的字节数。需要明确的是:该值是字节数在值中,而不是字符数中。如果sqlite3_bind_text()或sqlite3_bind_text16()的第四个参数为负,则字符串的长度为直到第一个零终止符的字节数。如果sqlite3_bind_blob()的第四个参数为负,则该行为未定义。如果将非负第四个参数提供给sqlite3_bind_text()或sqlite3_bind_text16()或sqlite3_bind_text64(),则该参数必须是字节偏移量,假定字符串以NUL终止,则NUL终止符将出现。如果任何NUL字符出现在字节偏移量小于第四个参数的值的位置,则结果字符串值将包含嵌入的NUL。涉及带有嵌入式NUL的字符串的表达式的结果是不确定的。

BLOB和字符串绑定接口的第五个参数是一个析构函数,用于在SQLite完成后处理BLOB或字符串。即使对绑定API的调用失败,也会调用析构函数来处置BLOB或字符串,但如果第三个参数为NULL指针或第四个参数为负,则不会调用析构函数。如果第五个参数是特殊值SQLITE_STATIC,则SQLite假定该信息位于静态非托管空间中,不需要释放。如果第五个参数的值是SQLITE_TRANSIENT,则SQLite会在sqlite3_bind _ *()例程返回之前立即创建其自己的数据私有副本。

sqlite3_bind_text64()的第六个参数必须是 SQLITE_UTF8SQLITE_UTF16SQLITE_UTF16BESQLITE_UTF16LE 之一,以在第三个参数中指定文本的编码。如果sqlite3_bind_text64()的第六个参数不是上面显示的允许值之一,或者文本编码与第六个参数指定的编码不同,则该行为是不确定的。

sqlite3_bind_zeroblob()例程绑定长度为N的BLOB,并用零填充。在处理过程中,zeroblob使用固定数量的内存(仅保留一个整数即可容纳其大小)。Zeroblob旨在用作BLOB的占位符,其内容随后使用增量BLOB I / O例程编写 。零blob的负值将导致长度为零的BLOB。

sqlite3_bind_pointer(S,I,P,T,D)例程使准备好的语句S中的第I个参数 的SQL值为NULL,但也与类型T的指针P关联。D为NULL指针或指向P的析构函数的指针。使用P完成时,SQLite将使用P的单个参数调用析构函数D。T参数应为静态字符串,最好是字符串文字。sqlite3_bind_pointer()例程是为SQLite 3.20.0添加的 指针传递接口的一部分。

如果使用sqlite3_bind _ *()例程中的任何一个调用了带预准备语句的NULL指针,或者使用了比sqlite3_reset()最近调用了sqlite3_step()的预准备语句 ,则该调用将返回SQLITE_MISUSE。如果任何sqlite3_bind_()例程传递了已完成的准备好的语句,则结果是不确定的,可能有害。

sqlite3_reset()例程不会清除绑定。未绑定的参数被解释为NULL。

sqlite3_bind_ *例程成功返回SQLITE_OK, 如果出现任何错误,则返回错误代码SQLITE_TOOBIG如果字符串或BLOB的大小超过规定的限制,可能会返回sqlite3_limitSQLITE_LIMIT_LENGTH)或 SQLITE_MAX_LENGTH。 如果参数索引超出范围,则返回SQLITE_RANGE。 如果malloc()失败,则返回SQLITE_NOMEM

另请参见:sqlite3_bind_parameter_count()sqlite3_bind_parameter_name()sqlite3_bind_parameter_index()

另请参见 对象常量函数的列表