对于长度为 k 的 PK 列表:
listPK = [1,2,3...k]
我目前正在运行一个 for 循环,并查询数据库k次以检查该项目是否存在于数据库中。
List<bool> isPresent(List listPK)async{
final db = await database;
List<bool> output = List.filled(listPK.length, false)
for (var i = 0; i<listPk.length; i++){
List<Map> result = await db.query('elements', where: "id = ?", whereArgs: listPk[i]);
if (result[0] != null) {output[i] = true}
}
}
想知道是否有更有效的方法可以做到这一点。我只想知道数据库中是否存在 id。
使用WHERE ... IN
在一次调用中检查所有 ID。
String listQuery = listPK.join(', '); // "1, 2, 3, ..., k"
String query = 'SELECT * FROM table_name WHERE id IN ($listQuery);`;
List<Map> result = await db.rawQuery(query);
查询数据库一次并获取"元素"表中的所有 id 会更有效。一旦你在"元素"表中拥有所有的id,你就可以迭代并找到哪些id存在,哪些不存在。