专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
代码查询数据
sqlite3_exec
值返回一个int值,而查询数据需要返回记录,一条记录可能有多个字段.因此sqlite3_exec
无法返回查询结果.- 准备SQL语句,获取
prepared_statement
准备语句对象 在
SQLiteManager.swift
中添加查询语句/// 查询 func execQuery(sql: String) { // db: 数据库连接 // zSql: sql语句 // nByte: 要执行sql语句的长度, -1表示完整的sql语句 // ppStmt: 对象.查询的结果保存在这里面 // pzTail: 没有执行sql语句 var stmt: COpaquePointer = nil if sqlite3_prepare_v2(db, sql, -1, &stmt, nil) != SQLITE_OK { print("准备sql语句失败") return } // 准备成功, 单步执行 while sqlite3_step(stmt) == SQLITE_ROW { // 有一行数据 // UnsafePointer<UInt8> let cNmae = sqlite3_column_text(stmt, 1) let name = String(CString: UnsafePointer<CChar>(cNmae), encoding: NSUTF8StringEncoding) // stmt: 准备好的对象 iCol: 要获取第几行的数据 let age = sqlite3_column_int(stmt, 2) let height = sqlite3_column_double(stmt, 3) print("name: \(name), age: \(age), height: \(height)") } }
- 代码小结
- 这一部分的工作可以看作是对字符串的 SQL 语句进行编译,并且检查是否存在语法问题
- 编译成功后通过
sqlite3_step
执行 SQL,每执行一次,获取一条记录 - 通过
while
循环直至执行完毕 - 注意,指令执行完毕后需要释放