Swift 中使用 SQLite——新增数据

本文重点介绍两个方面,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: 返回自动增长 id
func 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值