sqlite是通过引用还是按值绑定?

时间:2016-01-31 00:58:54

标签: c sqlite parameters bind

当我在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这样的常量值,那就可以了。

2 个答案:

答案 0 :(得分:0)

数字始终以值绑定。

字符串和blob可以通过引用绑定(通过使用SQLITE_STATIC),但这不允许稍后更改长度,并且值本身可能会缓存在其他位置。

如果您想更改该值,必须再次拨打sqlite3_bind_*

此外,只有在调用sqlite3_reset之后再次执行语句之前,才能更改绑定。

答案 1 :(得分:-1)

C总是按值传递。传递引用的唯一方法是传入指针。在这种情况下,您必须使用&运算符获取变量的地址。