本文主要介绍在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
获取影响数据行数