您的位置:首页 > 移动开发 > Swift

Swift 中使用 SQLite——新增数据

2016-06-04 18:29 453 查看


本文重点介绍两个方面,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
 可以获得自动增长的主键值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: