You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:24:02