數(shù)據(jù)庫(kù):SwiftSQlite

與sqlite比較

本質(zhì):sqlite币呵。SwiftSqlite是swift的封裝怀愧。類似FMDB是OC的封裝侨颈。

易于使用原因:sql語(yǔ)句轉(zhuǎn)化為對(duì)應(yīng)關(guān)于對(duì)象操作。其實(shí)對(duì)應(yīng)的是相應(yīng)的sql語(yǔ)句芯义。

使用

初始化

  1. 數(shù)據(jù)庫(kù)哈垢,表,表結(jié)構(gòu)扛拨,初始化
 public static let standard = PTDownloadTable()
    
    //數(shù)據(jù)庫(kù)
    private var db: Connection?
    //表
    private let downLoadFile = Table("downLoadFile")
    // 列(數(shù)據(jù)庫(kù)表結(jié)構(gòu))
    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. 創(chuàng)建數(shù)據(jù)庫(kù)并連接
/// 創(chuàng)建數(shù)據(jù)庫(kù),并連接
    private func createDB() -> Connection? {
        //獲取doc路徑
        let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
        //如果不存在的話耘分,創(chuàng)建一個(gè)名為db.sqlite3的數(shù)據(jù)庫(kù),并且連接數(shù)據(jù)庫(kù)
        do {
            let db = try Connection("\(path)/db.sqlite3")
            print("?數(shù)據(jù)庫(kù)創(chuàng)建并連接成功:\(db)")
            return db
        } catch {
            print("??數(shù)據(jù)庫(kù)創(chuàng)建并連接失敗:\(error)")
            return nil
        }
    }
  1. 創(chuàng)建表
 /// 創(chuàng)建下載表,已經(jīng)存在不會(huì)再次創(chuàng)建
    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("?下載列表創(chuàng)建成功")
            } catch {
                print("??下載列表創(chuàng)建失敗:\(error)")
            }
        }
    }

注意: 第一次創(chuàng)建成功绑警,之后不會(huì)再次創(chuàng)建求泰。

   /// 增加記錄
    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("?查詢多條數(shù)據(jù)成功")
                return array
            } catch {
                print("??查詢多條數(shù)據(jù)失敗:\(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("?查詢單條數(shù)據(jù)成功:\(url)")
                        return true
                    }
                }
                print("??查詢單條數(shù)據(jù)失敗")
                return false
            } catch {
                print("??查詢單條數(shù)據(jù)失敗:\(error)")
                return false
            }
        }
        return false
        
    }

 ///更新單條條記錄:下載狀態(tài)和下載地址
    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 {
                    //只有真正下載完成,才更新:下載地址和下載時(shí)間
                   try db.run(fileModel.update(downLoadState <- state,
                                               destinationFielUrl <- destinationUrl,
                                               downLoadTime <- loadTime,
                                               type <- typeStr,
                                               title <- titleStr,
                                               brief <- briefStr))
                }
                
                print("?更新單條條記錄(下載狀態(tài)和下載地址)數(shù)據(jù)成功")
            } catch {
                print("??更新單條條記錄(下載狀態(tài)和下載地址):數(shù)據(jù)失敗:\(error)")
            }
        }
    }

/// 刪除對(duì)應(yīng)數(shù)據(jù)
    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地址渴频。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市北启,隨后出現(xiàn)的幾起案子卜朗,更是在濱河造成了極大的恐慌,老刑警劉巖咕村,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件场钉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡懈涛,警方通過(guò)查閱死者的電腦和手機(jī)逛万,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)批钠,“玉大人泣港,你說(shuō)我怎么就攤上這事〖劢常” “怎么了当纱?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)踩窖。 經(jīng)常有香客問(wèn)我坡氯,道長(zhǎng),這世上最難降的妖魔是什么洋腮? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任箫柳,我火速辦了婚禮,結(jié)果婚禮上啥供,老公的妹妹穿的比我還像新娘悯恍。我一直安慰自己,他們只是感情好伙狐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布涮毫。 她就那樣靜靜地躺著瞬欧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罢防。 梳的紋絲不亂的頭發(fā)上艘虎,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音咒吐,去河邊找鬼野建。 笑死,一個(gè)胖子當(dāng)著我的面吹牛恬叹,可吹牛的內(nèi)容都是我干的候生。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绽昼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陶舞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起绪励,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唠粥,沒(méi)想到半個(gè)月后疏魏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晤愧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年大莫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片官份。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡只厘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舅巷,到底是詐尸還是另有隱情羔味,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布钠右,位于F島的核電站赋元,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏飒房。R本人自食惡果不足惜搁凸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狠毯。 院中可真熱鬧护糖,春花似錦、人聲如沸嚼松。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至皆刺,卻和暖如春少辣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背羡蛾。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工漓帅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痴怨。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓忙干,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親浪藻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捐迫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 春秋時(shí)期,楚國(guó)有個(gè)砍柴的樵夫爱葵,名字叫卞和施戴。此人雖然整天在山里砍柴,不能識(shí)字?jǐn)嘧置日桑瑓s極有眼力赞哗,在識(shí)別礦石上有過(guò)人之處...
    禪悅心閱讀 4,362評(píng)論 0 0
  • 今天圣誕節(jié),西方的節(jié)日辆雾,東方的元旦節(jié)還有幾天才到肪笋,但是節(jié)日的熱度遠(yuǎn)不如圣誕節(jié),比如今天一來(lái)到公司就看到桌上有兩只襪...
    平_d0c9閱讀 96評(píng)論 0 1
  • 我們此行第二站度迂,就是傳說(shuō)中八仙成仙的蓬萊仙閣藤乙,到煙臺(tái)之后乘班車一個(gè)多小時(shí)就到了此地,我們住的地方離海邊只有三四分鐘...
    Swallowrain閱讀 237評(píng)論 0 1
  • Teaching is like one-way love. Though you hurt me thousan...
    我就是艾米呀_6043閱讀 864評(píng)論 1 6