swift数据库GRDB框架使用(iOS)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了swift数据库GRDB框架使用(iOS),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4133字,纯文字阅读大概需要6分钟。
内容图文
![swift数据库GRDB框架使用(iOS)](/upload/InfoBanner/zyjiaocheng/879/df64bb205a464a948bf2651771767c2b.jpg)
创建数据库管理类
DataManager.swift
import GRDB
struct DataBaseName {
/// 数据库名字
static let test = "test.db"
}
/// 数据库表名
struct TableName {
/// 学生
static let student = "student"
}
/// 数据库连接
class DBManager: NSObject {
/// 数据库路径
private static var dbPath: String = {
// 获取工程内容数据库名字
let filePath: String = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!.appending("/\(DataBaseName.test)")
//print("数据库地址:", filePath as Any)
return filePath
}()
/// 数据库配置
private static var configuration: Configuration = {
// 配置
var configuration = Configuration()
// 设置超时
configuration.busyMode = Database.BusyMode.timeout(5.0)
// 试图访问锁着的数据
//configuration.busyMode = Database.BusyMode.immediateError
return configuration
}()
// MARK: 创建数据 多线程
/// 数据库 用于多线程事务处理
static var dbQueue: DatabaseQueue = {
// 创建数据库
let db = try! DatabaseQueue(path: DBManager.dbPath, configuration: DBManager.configuration)
db.releaseMemory()
// 设备版本
return db
}()
}
学生类:
Student.swift
import GRDB
/// 学生类
struct Student: Codable {
/// 名字
var name: String?
/// 昵称
var nick_name: String?
/// 年龄
var age: Int?
/// 性别
var gender: Bool?
/// 设置行名
private enum Columns: String, CodingKey, ColumnExpression {
/// 名字
case name
/// 昵称
case nick_name
/// 年龄
case age
/// 性别
case gender
}
}
extension Student: MutablePersistableRecord, FetchableRecord {
/// 获取数据库对象
private static let dbQueue: DatabaseQueue = DBManager.dbQueue
//MARK: 创建
/// 创建数据库
private static func createTable() -> Void {
try! self.dbQueue.inDatabase { (db) -> Void in
// 判断是否存在数据库
if try db.tableExists(TableName.student) {
//debugPrint("表已经存在")
return
}
// 创建数据库表
try db.create(table: TableName.student, temporary: false, ifNotExists: true, body: { (t) in
// ID
t.column(Columns.name.rawValue, Database.ColumnType.text)
// 名字
t.column(Columns.nick_name.rawValue, Database.ColumnType.text)
// 朝代
t.column(Columns.age.rawValue, Database.ColumnType.integer)
// 简介
t.column(Columns.gender.rawValue, Database.ColumnType.boolean)
})
}
}
//MARK: 插入
/// 插入单个数据
static func insert(student: Student) -> Void {
// 判断是否存在
guard Student.query(name: student.name!) == nil else {
debugPrint("插入学生 内容重复")
// 更新
self.update(student: student)
return
}
// 创建表
self.createTable()
// 事务
try! self.dbQueue.inTransaction { (db) -> Database.TransactionCompletion in
do {
var studentTemp = student
// 插入到数据库
try studentTemp.insert(db)
return Database.TransactionCompletion.commit
} catch {
return Database.TransactionCompletion.rollback
}
}
}
//MARK: 查询
static func query(name: String) -> Student? {
// 创建数据库
self.createTable()
// 返回查询结果
return try! self.dbQueue.unsafeRead({ (db) -> Student? in
return try Student.filter(Column(Columns.name.rawValue) == name).fetchOne(db)
})
}
/// 查询所有
static func queryAll() -> [Student] {
// 创建数据库
self.createTable()
// 返回查询结果
return try! self.dbQueue.unsafeRead({ (db) -> [Student] in
return try Student.fetchAll(db)
})
}
//MARK: 更新
/// 更新
static func update(student: Student) -> Void {
/// 创建数据库表
self.createTable()
// 事务 更新场景
try! self.dbQueue.inTransaction { (db) -> Database.TransactionCompletion in
do {
// 赋值
try student.update(db)
return Database.TransactionCompletion.commit
} catch {
return Database.TransactionCompletion.rollback
}
}
}
//MARK: 删除
/// 根据名字删除学生
static func delete(name: String) -> Void {
// 查询
guard let student = self.query(name: name) else {
return
}
// 删除
self.delete(student: student)
}
/// 删除单个学生
static func delete(student: Student) -> Void {
// 是否有数据库表
self.createTable()
// 事务
try! self.dbQueue.inTransaction { (db) -> Database.TransactionCompletion in
do {
// 删除数据
try student.delete(db)
return Database.TransactionCompletion.commit
} catch {
return Database.TransactionCompletion.rollback
}
}
}
}
GRBD数据库操作:
// 插入数据
let stu = Student(name: "张三", nick_name: "哈皮", age: 30, gender: true)
Student.insert(student: stu)
// 查询数据
debugPrint("查询所有数据:", Student.queryAll())
代码demo下载地址
参考
使用 GRDB 在 Swift 中操作 SQLite 数据库
内容总结
以上是互联网集市为您收集整理的swift数据库GRDB框架使用(iOS)全部内容,希望文章能够帮你解决swift数据库GRDB框架使用(iOS)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。