【发布时间】:2015-10-26 10:18:02
【问题描述】:
在 SQLite 的 C 库中执行 SQL 查询时遇到问题。 这里的问题是查询何时包含 IN 子句。
例如,
查询:
SELECT * FROM EMPLOYEE WHERE ID IN (?);
C:
sqlite3_stmt *elems_stmt;
char empIds[40];
...
...
...
sqlite3_bind_text(elems_stmt, 1, (const char *)empIds, -1, SQLITE_TRANSIENT);
这里的empIds可能是4,5,6
但是结果,elems_stmt 没有得到任何结果。
相反,如果我将查询中的值硬编码为
SELECT * FROM EMPLOYEE WHERE ID IN (4,5,6);
我可以看到结果。
请让我知道第一个查询和相应代码中缺少什么。
谢谢。
【问题讨论】:
-
您不能使用可变数量的值参数化
IN运算符。您需要使用动态 SQL。 -
什么是动态SQL?如何将它与用于 sqlite 的 c 库一起使用?
-
动态 SQL 是指在程序中动态生成 SQL 作为字符串。