本文主要介紹在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
獲取影響數據行數