【问题标题】:How to use IN clause with SQLite for C? [duplicate]如何在 SQLite for C 中使用 IN 子句? [复制]
【发布时间】: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 作为字符串。

标签: c sqlite


【解决方案1】:

这在 sqLite 中是不可能的,假设您的 IN 语句中有可变数量的值。相反,您可以将查询作为字符串与其他程序逻辑剪辑在一起,然后像执行任何硬编码一样执行它。

【讨论】:

  • 谢谢。做了一个解决方法。由于我知道 IN 语句可以出现的最大值数,因此我将在查询中对这些占位符进行硬编码。分配相关数量的值,其余的将分配默认值。 SELECT * FROM (?,?,?,?) 将被分配值 (4,5,6,-1),其中 -1 表示默认值。
猜你喜欢
  • 2016-10-14
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 2016-10-16
相关资源
最近更新 更多