我有以下查询,该查询从名称为“ max”且ID不在123和444中的雇员表中选择。 没有ID的人将来可能会增长。但我收到错误
错误
(8023):[ERROR:flutter / lib / ui / ui_dart_state.cc(148)]未处理的异常:DatabaseException(在“?”附近:语法错误(代码1 SQLITE_ERROR):,正在编译:
查询
exit
答案 0 :(得分:4)
如果LIST
是不可预测的,则一种方法是可以使用JOIN
创建所需值NOT IN
的select语句。下面是一个示例。
void main() {
List<String> a = [];
a.add("123");
a.add("444");
var select =
'SELECT value from employee WHERE employeename = ? AND id NOT IN (\'' +
(a.join('\',\'')).toString() +
'\') ORDER BY timestamp DESC';
var table = await mydb.rawQuery(select, ["max"]);
}
如果您选择变量,您将得到
SELECT value from employee WHERE employeename = ? AND id NOT IN ('123','444')
ORDER BY timestamp DESC.
然后,您可以将以上语句传递给rawquery
并获得结果。
P.S:相应地使用单引号和双引号。
答案 1 :(得分:2)
我将寻求@ arun-palanisamy的解决方案,请参阅his comment。道具去给他。我只是尝试使用Groovy / Postgres进行以下操作,但是错误似乎相同,因此您可能需要尝试一下:
String[] a = ['123', '444']
// your code, throws 'ERROR: syntax error at or near "$2"':
// def table = sql.execute("SELECT value from employee WHERE employeename = ? AND id NOT IN ? ORDER BY timestamp DESC", ["max", a])
// code of arun-palanisamy, compiles:
def table = sql.execute("SELECT value from employee WHERE employeename = ? AND id NOT IN (${a.join(', ')}) ORDER BY timestamp DESC", ["max", a])
旁注:
a
尝试其他类型,例如我的代码中的Array,甚至是HashMap。?
数量的。更新:去this answer,我们同时发布了