Swift 中使用 SQLite——修改和删除数据

时间:2022-06-29 07:28:24

本文主要介绍在SQLite中修改数据删除数据:

  • 更新记录
/// 将当前对象信息更新到数据库
///
/// - returns: 是否成功
func updatePerson() -> Bool {
    guard let name = name else {
        print("姓名不能为空")

        return false
    }
    if id <= 0 {
        print("id 不正确")

        return false
    }

    let sql = "UPDATE T_Person set name = '\(name)', age = \(age), height = \(height) \n" +
        "WHERE id = \(id);"

    return SQLiteManager.sharedManager.execSQL(sql)
}

  • 删除记录
/// 将当前对象从数据库中删除
///
/// - returns: 是否成功
func deletePerson() -> Bool {
    if id <= 0 {
        print("id 不正确")

        return false
    }

    let sql = "DELETE FROM T_Person WHERE id = \(id);"

    return SQLiteManager.sharedManager.execSQL(sql)
}

  • 测试代码
/// 测试更新数据
private func demoUpdate() {
    let p = Person(dict: ["id": 3000, "name": "老王", "age": 108, "height": 1.7])

    if p.updatePerson() {
        print("更新成功 \(p)")
    } else {
        print("更新失败")
    }
}

/// 测试删除数据
private func demoDelete() {
    let p = Person(dict: ["id": 3000, "name": "老王", "age": 108, "height": 1.7])

    if p.deletePerson() {
        print("删除成功 \(p)")
    } else {
        print("删除失败")
    }
}

小结

  • 创表 / 新增 / 修改 / 删除 本质上都是执行一条 SQL 指令
  • 删除记录时,如果数据不存在,不会返回错误
  • 更新记录时,如果指定的 id 不存在,不会返回错误

数据操作方法扩展

  • 增加 execUpdate 函数
/// 执行 更新 / 删除 SQL
///
/// - parameter sql: sql
///
/// - returns: 返回 更新 / 删除 的数据行数
func execUpdate(sql: String) -> Int {
    if !execSQL(sql) {
        return -1
    }
    // 返回影响的数据行数
    return Int(sqlite3_changes(db))
}
  • 修改更新和删除按钮,再次测试
/// 将当前对象从数据库中删除
///
/// - returns: 是否成功
func deletePerson() -> Bool {
    if id <= 0 {
        print("id 不正确")

        return false
    }

    let sql = "DELETE FROM T_Person WHERE id = \(id);"

    return SQLiteManager.sharedManager.execUpdate(sql) > 0
}

/// 将当前对象信息更新到数据库
///
/// - returns: 是否成功
func updatePerson() -> Bool {
    guard let name = name else {
        print("姓名不能为空")

        return false
    }
    if id <= 0 {
        print("id 不正确")

        return false
    }

    let sql = "UPDATE T_Person set name = '\(name)', age = \(age), height = \(height) \n" +
        "WHERE id = \(id);"

    return SQLiteManager.sharedManager.execUpdate(sql) > 0
}

备注

  • 新增记录可以使用 sqlite3_last_insert_rowid 获取最后插入的主键数值
  • 更新 / 删除记录可以使用 sqlite3_changes 获取影响数据行数