当我在sqlite中绑定时,实际发生了什么,或者基本上我通过引用或值传递?如果我绑定一个变量,sqlite会看到变量值的变化还是一次性交易?循环中的绑定告诉我,我正在滥用库,即使我使用sqlite3_clear_bindings清除循环内容末尾的绑定。绑定首先让我没有任何行,即使绑定返回SQLITE_OK。 (它是绑定0吗?)
int cat;
sql = "select x,y,z from table where q = ?"
bind cat (to ?) here
for (cat=0; cat<topcat; cat++) {
// I want (multiple) results for each cat value here
rslt = 0;
while ((rslt != SQLITE_DONE) && (rslt != SQLITE_ERROR)) {
rslt = sqlite3_step(stmt2);
// do column stuff here to fetch values
}
}
程序的另一部分从另一个表中获取所有行,但SQL中没有where子句。如果我拿出那里并绑定了这个我可以得到所有的行。如果我绑定到像3而不是cat这样的常量值,那就可以了。
答案 0 :(得分:0)
数字始终以值绑定。
字符串和blob可以通过引用绑定(通过使用SQLITE_STATIC),但这不允许稍后更改长度,并且值本身可能会缓存在其他位置。
如果您想更改该值,必须再次拨打sqlite3_bind_*
。
此外,只有在调用sqlite3_reset
之后再次执行语句之前,才能更改绑定。
答案 1 :(得分:-1)
C总是按值传递。传递引用的唯一方法是传入指针。在这种情况下,您必须使用&
运算符获取变量的地址。