检查 SQFLITE 数据库中存在 PK 列表中的哪些 PK



对于长度为 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存在,哪些不存在。

最新更新