SQLite.swift 使用

原理介绍就不说赘述了,直接集成。
1. cocoapods配置sdk

pod ‘SQLite.swift’

  1. model模型直接用字段名得先封装以下,这里我们转换(宏定义)一下,方便引用
    //1.声明model模型
    class CDOptionModel: NSObject {
    enum CDOptionType:String {
    case yes = “YES”
    case no = “NO”
    }
    var title:String = “” //字符串
    var isLike = false //布尔
    var createTime:Int = 0 //Int值
    var type:CDOptionType = .no //枚举
    }

2.转化(宏定义),在后续操作中可用以下别名
let sqlFileName = “MySQL.db” //数据库名称
let OptionModel = Table(“TabName”) //表名称,可同model名
let db_id = Expression

  1. 创建数据库,创建表
    class CDSqlManager: NSObject {
    static let shared = CDSqlManager()
    var db:Connection!

private override init() {
super.init()
objc_sync_enter(self)
openDatabase()
objc_sync_exit(self)
}
//创建数据库文件
private func openDatabase() {
let libraryPath = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true).first!

let dbpath = libraryPath().appendingPathComponent(str: “/(sqlFileName)”)
if !FileManager.default.fileExists(atPath: dbpath) {
FileManager.default.createFile(atPath: dbpath, contents: nil, attributes: nil)
db = try! Connection(dbpath)
createTable()
}else{
do{
db = try Connection(dbpath)
CDPrint(item: “数据库连接成功”)
}catch{
CDPrint(item: “数据库连接失败:(error.localizedDescription)”)
}
}
}
//建议:每个表加一个扩展,在该扩展下写该表的所有操作,本文件只用来建、连数据库,数据库更新等
private func createTable() -> Void {
CDPrintManager.log(“创建数据库表”, type: .InfoLog)
createOptionTable()
}
}

func CDPrint(item:Any) {
print(item)
}

4.数据的增删改查 因为数据模型比较多时,全部写在同一个文件不好阅读和维护,建议一个表写入一个扩展文件中 CDSqlManager+option.swift
extension CDSqlManager{

//创建表
internal func createOptionTable() -> Void {
do{
let create = OptionModel.create(temporary: false, ifNotExists: false, withoutRowid: false) { (build) in
build.column(db_id,primaryKey: true)
build.column(db_title)
build.column(db_createTime)
build.column(db_isLike)
build.column(db_type)
}
try db.run(create)
CDPrint(item:”createOptionModel –>success”)

}catch{
CDPrint(item:”createOptionModel –>error:(error)”)
}
}

//所有query,数据库模型转OptionModel
private func getNKOptionModelFromItem(item:Row) -> NKOptionModel {
let info = NKOptionModel()
info.title = item[db_title]
info.createTime = item[db_createTime]
info.type = NKOptionType(rawValue: item[db_type])!

info.isLike = item[db_isLike]
return info
}

//查询字段的属性,直接在字段后跟上该属性,.max(),.min()
private func queryMaxInt()->Int{
//查询表内最大id,新记录的id = 最大id+1
var maxInt = 0
do{
maxInt = try db.scalar(OptionModel.select(db_createTime.max)) ?? 0
CDPrint(item:”queryAllModelList –>success”)
}catch{
CDPrintManager.log(“queryAllModelList –>error:(error)”, type: .ErrorLog)
}
return maxFileId
}
//添加数据
func addNKOptionModel(info:NKOptionModel) {
let ModelId = queryMaxModelId() + 1
do {
try db.run(OptionModel.insert(
//用户模型向数据库模型赋值,用

Original: https://blog.csdn.net/weixin_48838219/article/details/125292211
Author: 中 和
Title: SQLite.swift 使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815419/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球