Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 带AND运算符的sqflite IN运算符_Flutter_Dart_Sqflite - Fatal编程技术网

Flutter 带AND运算符的sqflite IN运算符

Flutter 带AND运算符的sqflite IN运算符,flutter,dart,sqflite,Flutter,Dart,Sqflite,我有以下查询,从employee表中选择,其中name是max,ID不在123和444中。 不在IDs中,未来可能会增长。但我收到的错误是 错误 8023:[错误:flatter/lib/ui/ui\u dart\u state.cc148]未处理的异常:DatabaseExceptionOnline?:语法错误代码1 SQLITE\u错误:,编译时: 质疑 如果列表不可预测,一种方法是使用JOIN创建所需值为NOT IN的select语句。下面是一个例子 void main() { Lis

我有以下查询,从employee表中选择,其中name是max,ID不在123和444中。 不在IDs中,未来可能会增长。但我收到的错误是

错误

8023:[错误:flatter/lib/ui/ui\u dart\u state.cc148]未处理的异常:DatabaseExceptionOnline?:语法错误代码1 SQLITE\u错误:,编译时:

质疑

如果列表不可预测,一种方法是使用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"]);
}
然后,您可以将上述语句传递给rawquery并获得结果


附言:相应地使用单引号和双引号。

我会选择@arun palanisamy的解决方案,请参阅。道具归他所有。我刚刚用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])
旁注:

您可能希望尝试使用不同类型的数组,例如代码中的数组,甚至HashMap。 这里有一些例子,比如在什么地方?是动态生成的。
更新:继续,我们同时发布了

这是在颤振中,它使用飞镖语言。是的,我知道了。列表值是固定的吗?我的意思是它总是2吗?如果是这样的话,一种方法是参数?不应匹配任何值。像…不在。。。然后将值放在wherergs:a中,或者您必须将值与,…类似于${a.join'中的id,'}值列表将发生变化,现在是2,但将来可能是5,6。这取决于解决方案是否有效。这是职业水平。因此,我可以优化代码。如果您的任何SQL是通过在运行时生成字符串来完成的,那么您只需要请求Bobby Tables SQL注入攻击。请不要那样做。这就是占位符的作用@Randal Schwartz,我同意,这段代码很容易被SQL注入。我试图解决OP公司现有的问题。我将在答案中添加一句警告,并尝试提供一个避免SQL注入的替代查询。这可能是SQL注入攻击。不要这样做。使用占位符。不要在运行时从程序数据生成SQL。
SELECT value from employee  WHERE employeename = ? AND id NOT IN ('123','444') 
ORDER BY timestamp DESC.
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])