数据库:SwiftSQlite

与sqlite比较

本质:sqlite。SwiftSqlite是swift的封装。类似FMDB是OC的封装。

易于使用原因:sql语句转化为对应关于对象操作。其实对应的是相应的sql语句。

使用

初始化

  1. 数据库,表,表结构,初始化
 public static let standard = PTDownloadTable()
    
    //数据库
    private var db: Connection?
    //表
    private let downLoadFile = Table("downLoadFile")
    // 列(数据库表结构)
    private let id = Expression<Int64>("id")
    private let fielUrl = Expression<String>("fielUrl")
    private let downLoadState = Expression<String>("downLoadState")
    private let isBrowse = Expression<Bool>("isBrowse")
    private let destinationFielUrl = Expression<String>("destinationFielUrl")
    private let downLoadTime = Expression<String>("downLoadTime")
    private let type = Expression<String>("type")
    private let title = Expression<String>("title")
    private let brief = Expression<String>("biref")
    
    init () {
        //
        self.db = createDB()
        createTable()
    }
  1. 创建数据库并连接
/// 创建数据库,并连接
    private func createDB() -> Connection? {
        //获取doc路径
        let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
        //如果不存在的话,创建一个名为db.sqlite3的数据库,并且连接数据库
        do {
            let db = try Connection("\(path)/db.sqlite3")
            print("✅数据库创建并连接成功:\(db)")
            return db
        } catch {
            print("🚫数据库创建并连接失败:\(error)")
            return nil
        }
    }
  1. 创建表
 /// 创建下载表,已经存在不会再次创建
    private func createTable() {
        if let db = self.db {
            do {
                try db.run(downLoadFile.create(block: { (t) in
                        t.column(id, primaryKey: .autoincrement)
                        t.column(fielUrl, defaultValue: "")
                        t.column(downLoadState, defaultValue: "0")
                        t.column(isBrowse, defaultValue: false)
                        t.column(destinationFielUrl, defaultValue: "")
                        t.column(downLoadTime, defaultValue: "")
                        t.column(type, defaultValue: "")
                        t.column(title, defaultValue: "")
                        t.column(brief, defaultValue: "")
                    }))
                print("✅下载列表创建成功")
            } catch {
                print("🚫下载列表创建失败:\(error)")
            }
        }
    }

注意: 第一次创建成功,之后不会再次创建。

   /// 增加记录
    public func insertOne(_ fileModel: PTDownLoadModel) {

        if let db = self.db {
            let insertDownLoadModel = downLoadFile.insert(fielUrl <- fileModel.fielUrl,
                                                    downLoadState <- fileModel.downLoadState,
                                                    isBrowse <- fileModel.isBrowse,
                                                    destinationFielUrl <- fileModel.destinationFielUrl,
                                                    downLoadTime <- fileModel.downLoadTime)
            do {
               try db.run(insertDownLoadModel)
                print("✅增加成功")
            } catch {
                print("🚫增加失败:\(error)")
            }
        }
     
    }

    /// 查询多条记录
    public func queryManyRecord() -> [PTDownLoadModel]? {
        
        var array: [PTDownLoadModel] = []
        if let db = self.db {
            do {
                for fileModel in try db.prepare(downLoadFile) {
                    let downLoadModel = PTDownLoadModel()
                    downLoadModel.fielUrl = fileModel[fielUrl]
                    downLoadModel.downLoadState = fileModel[downLoadState]
                    downLoadModel.isBrowse = fileModel[isBrowse]
                    downLoadModel.destinationFielUrl = fileModel[destinationFielUrl]
                    downLoadModel.downLoadTime = fileModel[downLoadTime]
                    downLoadModel.type = fileModel[type]
                    downLoadModel.title = fileModel[title]
                    downLoadModel.brief = fileModel[brief]
                    array.append(downLoadModel)
                }
                print("✅查询多条数据成功")
                return array
            } catch {
                print("🚫查询多条数据失败:\(error)")
                return nil
            }
        }
        return nil
        
    }
  /// 查询单条记录
    public func queryOneRecord(_ url: String) -> Bool {
        
        if let db = self.db {
            do {
                for fileModel in try db.prepare(downLoadFile) {
                    if url == fileModel[fielUrl] {
                        print("✅查询单条数据成功:\(url)")
                        return true
                    }
                }
                print("🚫查询单条数据失败")
                return false
            } catch {
                print("🚫查询单条数据失败:\(error)")
                return false
            }
        }
        return false
        
    }

 ///更新单条条记录:下载状态和下载地址
    public func updateOneLoadRecord(_ url: String,_ state: String,_ destinationUrl: String,_ loadTime: String,_ typeStr: String,_  titleStr: String,_  briefStr: String) {
        
        if  let db = self.db {
            let fileModel = downLoadFile.filter(fielUrl == url)
            do {
                if destinationUrl == "" {
                    try db.run(fileModel.update(downLoadState <- state))
                } else if loadTime == "" {
                    try db.run(fileModel.update(downLoadState <- state))
                } else {
                    //只有真正下载完成,才更新:下载地址和下载时间
                   try db.run(fileModel.update(downLoadState <- state,
                                               destinationFielUrl <- destinationUrl,
                                               downLoadTime <- loadTime,
                                               type <- typeStr,
                                               title <- titleStr,
                                               brief <- briefStr))
                }
                
                print("✅更新单条条记录(下载状态和下载地址)数据成功")
            } catch {
                print("🚫更新单条条记录(下载状态和下载地址):数据失败:\(error)")
            }
        }
    }

/// 删除对应数据
    func delete(_ url: String) {
        
        if let db = self.db {
            let fileModel = downLoadFile.filter(fielUrl == url)
            do {
                try db.run(fileModel.delete())
                print("✅删除成功:\(url)")
            } catch {
                print("🚫删除失败:\(url):\(error)")
            }
        }
    }

表字段更新

多表查询

这些可以从下边官方文档看

sqliteswift的git地址。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 春秋时期,楚国有个砍柴的樵夫,名字叫卞和。此人虽然整天在山里砍柴,不能识字断字,却极有眼力,在识别矿石上有过人之处...
    禅悦心阅读 9,988评论 0 0
  • 今天圣诞节,西方的节日,东方的元旦节还有几天才到,但是节日的热度远不如圣诞节,比如今天一来到公司就看到桌上有两只袜...
    平_d0c9阅读 1,022评论 0 1
  • 我们此行第二站,就是传说中八仙成仙的蓬莱仙阁,到烟台之后乘班车一个多小时就到了此地,我们住的地方离海边只有三四分钟...
    Swallowrain阅读 1,792评论 0 1
  • Teaching is like one-way love. Though you hurt me thousan...
    我就是艾米呀_6043阅读 4,406评论 1 6

友情链接更多精彩内容