如何获取SQLite.swift原生查询返回的行数?
解决方案
方法一:用EXISTS查询直接判断(最高效)
如果你只需要判断是否存在匹配的行,不需要获取实际的class值,推荐用EXISTS子查询。这种方式数据库会在找到第一个匹配行后立即终止查询,性能最优:
let hasMatchingRow = try db!.scalar(""" SELECT EXISTS(SELECT 1 FROM "character" WHERE character_id = ?) """, character.id) as! Bool if hasMatchingRow { // 存在符合条件的行 } else { // 无匹配行 }
方法二:基于原有查询快速判断
如果之后还需要使用查询返回的class数据,可以通过Statement的next()方法快速判断是否有结果:
let statement = try db!.prepare(""" SELECT class from "character" where character_id = ? """, character.id) if statement.next() { // 存在匹配行,可在此获取第一个结果: let className = statement[0] as! String // 若后续需要重新遍历结果,调用重置方法: statement.reset() } else { // 无匹配行 }
注意
避免直接使用statement.count获取行数——对于SELECT查询,这个属性需要先遍历所有结果才能得到准确值,完全不符合高效需求。
内容的提问来源于stack exchange,提问作者mikechambers
相关产品推荐
相关产品推荐

