c - sqlite 是按引用绑定(bind)还是按值绑定(bind)?

标签 c sqlite parameters bind

当我在 sqlite 中绑定(bind)时,实际发生了什么,或者本质上我是通过引用还是通过值传递?如果我绑定(bind)一个变量,sqlite 会看到变量值的变化还是一次性处理?循环内的绑定(bind)告诉我我滥用了该库,即使我使用 sqlite3_clear_bindings 清除了循环内容末尾的绑定(bind)。绑定(bind)首先不会让我得到任何行,即使绑定(bind)返回 SQLITE_OK。 (是否绑定(bind)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 子句。如果我将其中的位置并绑定(bind)出来,我就可以获得所有行。如果我绑定(bind)到像 3 这样的常量值而不是 cat,那就可以了。

最佳答案

数字总是受值的约束。

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

如果您想更改该值,您必须再次调用sqlite3_bind_*

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

关于c - sqlite 是按引用绑定(bind)还是按值绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109116/

相关文章:

c - 头文件中的枚举类型和结构

java - SQLite (1) 没有这样的表

sqlite - SQLAlchemy + SQLite左联接性能问题

java - 创建抽象方法而不固定其参数类型

c - 在不同级别的函数中传递参数

C - 调试二维数组的特定子数组

c++ - 为 VS 2010 (MSVC 10) 编译的 libcurl 二进制文件

c - 了解C语言中函数指针的typedef

mysql - Rails 5.2 : Incorrect DB adapter being called by app. 为什么?

java - Wicket PageParameters 干扰页面的模型对象