Swift操作Sqlite3数据库执行select时sqlite3_step恒返回100问题咨询
问题排查结论
你观察到的现象属于正常执行结果,和数据库配置、表结构均无关联。
原因说明
- SQLite 官方定义的返回码常量
SQLITE_ROW的原始值就是100,sqlite3_step返回该值时代表当前已定位到一条有效的查询结果行,你打印的rc变量本身就是这个返回码,不是行号、也不是查询到的字段值。 - 输出出现9次
row 100,说明你的unsplash_photos表中当前正好存在9条记录,查询逻辑本身没有报错。
正确获取字段值的示例代码
如果需要读取查询得到的photo_id字段值,可以在循环内调用对应类型的取值接口,示例如下(以photo_id为字符串类型为例):
while rc == SQLITE_ROW { // 查询结果列的索引从0开始,第0列就是查询语句里的photo_id if let photoIdPtr = sqlite3_column_text(statement, 0) { let photoId = String(cString: photoIdPtr) print("查询到的photo_id:", photoId) } rc = sqlite3_step(statement) } // 执行完成后必须释放prepared statement,避免内存泄漏 sqlite3_finalize(statement)
额外注意点
- 所有通过
sqlite3_prepare_v2创建的语句对象,使用完成后都要调用sqlite3_finalize释放,否则会出现内存泄漏。 - 数据库操作全部完成后要调用
sqlite3_close关闭数据库连接。
内容的提问来源于stack exchange,提问作者Justin Philip Fulkerson
相关产品推荐
相关产品推荐

