Flutter sqflite 中的 where in 子句

时间:2021-05-28 02:32:13

标签: flutter sqflite

我正在尝试使用 where in clasue 但我收到此错误:

<块引用>

无效参数 [1, 2, 3] 类型为 List Only num、String 和 支持 Uint8List。

我的代码:

Database db = await instance.database;
List<Map> maps = await db.query('table',
where: 'categoryID in (?)', whereArgs: [ [1,2,3]]);

从此document

<块引用>

特别是,不支持列表(期待 blob 内容)。一种 常见的错误是期望使用 IN (?) 并给出值列表。 这不起作用。相反,您应该一一列出每个参数:

var list = await db.rawQuery('SELECT * FROM my_table WHERE name IN (?, ?, ?)', ['cat', 'dog', 'fish']);

但我的类别随时可能发生变化,所以我无法一一列出每个参数。

1 个答案:

答案 0 :(得分:0)

虽然我知道这听起来很痛苦,但不幸的是 SQLite 的工作方式和 sqflite 不做任何 SQL 解析。

您可以尝试以下我个人用来构建适当数量的 ? 的解决方案。

List.filled(inArgsCount, '?').join(',')

例如:

var inArgs = ['cat', 'dog', 'fish'];
var list = await db.query('my_table',
    where: 'name IN (${List.filled(inArgs.length, '?').join(',')})',
    whereArgs: inArgs);