专业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 循环直至执行完毕
    • 注意,指令执行完毕后需要释放

results matching ""

    No results matching ""