Swift Sqlite

連接數(shù)據(jù)庫

var db:Connection!
    
    init() {
        connectDatabase()
    }
    
    mutating func connectDatabase(filePath: String = "/Documents") -> Void {
        let sqlFilePath = NSHomeDirectory() + filePath + "/db.sqlite3"
        do { // 與數(shù)據(jù)庫建立連接
            db = try Connection(sqlFilePath)
            print("與數(shù)據(jù)庫建立連接 成功")
            
        } catch {
    
            print("與數(shù)據(jù)庫建立連接 失?。篭(error)")
            
        }
Swift中mutating關(guān)鍵字

mutating 可改變 可變化
mutating 可變化,可改變

mutating可使用到的地方:
1.結(jié)構(gòu)體,枚舉類型中的方法
2.extension中的方法
3.protocol方法

1.修改struct,enum的屬性變量:周知swift中結(jié)構(gòu)體和枚舉中是可以包含類方法和實例方法,可是官方不建議在實例方法中修改其屬性變量(immutable),在func前加入mutating關(guān)鍵字后,使其屬性變量可修改(mutable)
2.在extension中同理
3.可能會被struct或enum實現(xiàn)的protocol方法,需要聲明為mutating使實現(xiàn)時可修改其自己的屬性變量,同時因為mutating對于class來說是完全透明的,不必?fù)?dān)心使用class實現(xiàn)該protocol方法會帶來影響

建立 備忘錄--表格

let TABLE_NOTE = Table("note")

id 行數(shù)

let TABLE_NOTE_ID = Expression<Int64>("note_id")

備忘錄 內(nèi)容

let TABLE_NOTE_TITLE = Expression<String>("note_title")
let TABLE_NOTE_CONTENT = Expression<String>("note_content")

表格創(chuàng)建

primaryKey: .autoincrement
表示主鍵每次增加一 且第一行主鍵為1

func tableLameCreate() {
        do{
            try db.run(TABLE_NOTE.create { table in
                table.column(TABLE_NOTE_ID, primaryKey: .autoincrement)   // 主鍵自加 不為空
                table.column(TABLE_NOTE_CONTENT)
                table.column(TABLE_NOTE_TITLE)
            })
            print("表格 TABLE_NOTE 創(chuàng)建成功")
        } catch {
            print("表格 TABLE_NOTE 創(chuàng)建失敗")
        }
    }

插入數(shù)據(jù)

func insertData(title: String,content: String)-> Void {
        let insert = TABLE_NOTE.insert(TABLE_NOTE_TITLE <- title, TABLE_NOTE_CONTENT <- content)  // 插入下一行數(shù)據(jù)
        do {
            let rowid = try db.run(insert)
            print("插入數(shù)據(jù)成功 id: \(rowid)")
        } catch {
            print("插入數(shù)據(jù)失敗: \(error)")
        }
    
    }

遍歷數(shù)據(jù)

func queryTableLamp() -> Void {
        for item in (try! db.prepare(TABLE_NOTE)) {
            print("note 遍歷 ———— id: \(item[TABLE_NOTE_ID]), title: \(item[TABLE_NOTE_TITLE]), content: \(item[TABLE_NOTE_CONTENT])")
        }
    }

讀取數(shù)據(jù)

func readTableLampItem(id: Int64) -> Void {
    
        for item in try! db.prepare(TABLE_NOTE.filter(TABLE_NOTE_ID == id)) {
    
            print("id: \(item[TABLE_NOTE_ID]), title: \(item[TABLE_NOTE_TITLE]), content: \(item[TABLE_NOTE_CONTENT])")
            
        }
    }

更新數(shù)據(jù)

func tableLampUpdateItem(id: Int64, newTitle: String, newContent:String) -> Void {
        let item = TABLE_NOTE.filter(TABLE_NOTE_ID == id)
        do {
            if try db.run(item.update(TABLE_NOTE_TITLE <- newTitle)) > 0&&db.run(item.update(TABLE_NOTE_CONTENT <- newContent)) > 0 {
                print("\(id) 更新成功")
            } else {
                print("沒有發(fā)現(xiàn) \(id)")
            }
        } catch {
            print("NOTE\(id) 更新失?。篭(error)")
        }
    }

刪除數(shù)據(jù)

func tableLampDeleteItem(id: Int64) -> Void {
        let item = TABLE_NOTE.filter(TABLE_NOTE_ID == id)
        do {
            if try db.run(item.delete()) > 0 {
                print("NOTE\(id) 刪除成功")
            } else {
                print("沒有發(fā)現(xiàn) NOTE \(id)")
            }
        } catch {
            print("NOTE\(id) 刪除失?。篭(id)")
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 132.轉(zhuǎn)換錯誤成可選值 通過轉(zhuǎn)換錯誤成一個可選值,你可以使用 try? 來處理錯誤。當(dāng)執(zhí)行try?表達(dá)式時,如果...
    無灃閱讀 1,427評論 0 3
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,171評論 1 10
  • 1、范型范型所解決的問題 函數(shù)、方法、類型:類,結(jié)構(gòu)體,枚舉,元組類型,協(xié)議參數(shù),返回值,成員函數(shù)參數(shù),成員屬性類...
    我是小胡胡123閱讀 941評論 0 1
  • 基礎(chǔ)部分(The Basics) 當(dāng)推斷浮點(diǎn)數(shù)的類型時,Swift 總是會選擇Double而不是Float。 結(jié)合...
    gamper閱讀 1,487評論 0 7
  • 起初,我們揣著糊涂裝明白。后來,我們揣著明白裝糊涂。并不是我們愿意活得不明不白。只是,好多事情,一用力,就會拆穿,...
    萌兔小仙女閱讀 185評論 0 0

友情鏈接更多精彩內(nèi)容