Swift 中使用 SQLite——修改和刪除數據

本文主要介紹在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 獲取影響數據行數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章