Swift 中使用 SQLite——新增数据

来源:互联网 发布:全球人口增长数据 编辑:程序博客网 时间:2024/05/11 06:07

本文重点介绍两个方面,1、新增数据,2、获取自动增长 ID。

建立 Person.swift 数据模型

/// 个人模型class Person: NSObject {    // MARK: - 模型属性    /// 代号    var id: Int64 = 0    /// 姓名    var name: String?    /// 年龄    var age = 0    /// 身高    var height: Double = 0    // MARK: - 构造函数    init(dict: [String: AnyObject]) {        super.init()        setValuesForKeysWithDictionary(dict)    }    override var description: String {        let keys = ["id", "name", "age", "height"]        return dictionaryWithValuesForKeys(keys).description    }    // MARK: - 数据库操作方法}

新增记录

  • 在 Person 模型中添加以下代码
/// 将当前对象添加到数据库////// - returns: 是否成功func insertPerson() -> Bool {    guard let name = name else {        print("姓名不能为空")        return false    }    let sql = "INSERT INTO T_Person (name, age, height) VALUES ('\(name)', \(age), \(height));"    return SQLiteManager.sharedManager.execSQL(sql)}
  • 在 ViewController 中增加测试代码
/// 测试插入数据func demoInsert() {    let p = Person(dict: ["name": "zhangsan", "age": 19, "height": 1.7])    if p.insertPerson() {        print("插入成功 \(p)")    } else {        print("插入失败")    }}

小结

  • 如果主键是自动增长的,在插入数据时,不需要指定
  • 字符串类型的属性,需要使用单引号

问题:如何获取自动增长的主键数值?

  • 在 SQLiteManager 中增加函数 execInsert
/// 执行插入 SQL////// - parameter sql: sql////// - returns: 返回自动增长 idfunc execInsert(sql: String) -> Int64 {    if !execSQL(sql) {        return -1    }    // 返回自动增长 id    return Int64(sqlite3_last_insert_rowid(db))}
  • 修改 insertPerson() 函数
/// 将当前对象插入到数据库////// - returns: 是否成功func insertPerson() -> Bool {    // 0. 断言姓名不为 nil    assert(name != nil, "姓名不能为 nil")    // 1. 准备 SQL    let sql = "INSERT INTO T_Person (name, age, height) VALUES ('\(name!)', \(age), \(height));"    // 2. 获得自动增长 id    id = SQLiteManager.sharedManager.execInsert(sql)    return id > 0}
  • 使用 sqlite3_last_insert_rowid 可以获得自动增长的主键值
0 0
原创粉丝点击