swift 數(shù)據(jù)庫(kù)WCDB封裝使用 (2020.04.17) 一行代碼實(shí)現(xiàn)增刪改查

wcdb github 地址 這里面有詳細(xì)的安裝使用說(shuō)明文檔, 超級(jí)無(wú)敵詳細(xì)那種.

附上我的swfit項(xiàng)目, 項(xiàng)目里面有整個(gè)swift應(yīng)用使用框架, 網(wǎng)絡(luò)請(qǐng)求框架, DSBridge原生與H5交互的用法, 反射知識(shí)的使用, WCDB數(shù)據(jù)庫(kù)的封裝使用, WebRTC音視頻直播demo, socket的使用, socket協(xié)議的封裝使用等等知識(shí)點(diǎn). 希望對(duì)大家有用.-->swfit完整項(xiàng)目2020持續(xù)更新完善

安裝

使用cocoapod進(jìn)行安裝, 超級(jí)方便

pod 'WCDB.swift'

WCDB支持ORM(直接對(duì)模型對(duì)象進(jìn)行操作), 例如我們要存一個(gè)Sample對(duì)象到數(shù)據(jù)庫(kù):


import WCDBSwift

class Sample: NSObject,TableCodable {
    
    var id: Int = 0
    var ssid: String?
    var password: String?

    enum CodingKeys: String, CodingTableKey {
        typealias Root = Sample
        static let objectRelationalMapping = TableBinding(CodingKeys.self)

        case id
        case ssid
        case password
        
        //Column constraints for primary key, unique, not null, default value and so on. It is optional.
        static var columnConstraintBindings: [CodingKeys: ColumnConstraintBinding]? {
            return [
                //自增主鍵的設(shè)置
                .id: ColumnConstraintBinding(isPrimary: true, isAutoIncrement: true)
            ]
        }

    }
    
    /// 用于定義是否使用自增的方式插入
    var isAutoIncrement: Bool = true
    
    /// 用于獲取自增插入后的主鍵值
    var lastInsertedRowID: Int64 = 0
}

封裝的數(shù)據(jù)庫(kù)管理工具類(lèi):

import WCDBSwift


struct WcdbDataPath {
    
   static let basePath =  NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! + "/DB/wcdb.db"
}
enum DBTableName : String {

    case sampleTable = "Sample"
}

class DBmanager: NSObject {

    static let share = DBmanager.init()
    var db: Database?
    
    override init() {
        super.init()
        db = createDB()
        createTable()
    }
    
    private func createDB() -> Database {
       return Database(withPath: WcdbDataPath.basePath)
    }
    
    /// 數(shù)據(jù)庫(kù)與表的初始化
    private func createTable() {
        do {
         //1. 創(chuàng)建主數(shù)據(jù)庫(kù)main的相關(guān)表
           try db?.run(transaction: {
            createTable(table: DBTableName.sampleTable, modelType: Sample.self)
            })
         
        } catch let error {
            print("初始化數(shù)據(jù)庫(kù)及ORM對(duì)應(yīng)關(guān)系建立失敗\(error.localizedDescription)")
        }
    }

    ///創(chuàng)建表
    private func createTable<T: TableDecodable>(table: DBTableName, modelType: T.Type) {
        do {
            try db?.create(table: table.rawValue, of: modelType)
        }catch let error {
            debugPrint(error.localizedDescription)
        }
    }
    
    ///插入數(shù)據(jù)
    public func inser<T: TableEncodable>(objects:[T], intoTable table: DBTableName){
        do {
            try db?.insert(objects: objects, intoTable: table.rawValue)
        }catch let error {
            debugPrint(error.localizedDescription)
        }
    }

    ///修改
    public func update<T: TableEncodable>(fromTable table: DBTableName, on propertys:[PropertyConvertible], itemModel object:T,where condition: Condition? = nil){
        do {
            try db?.update(table: table.rawValue, on: propertys, with: object, where: condition)
        } catch let error {
            debugPrint(" update obj error \(error.localizedDescription)")
        }
    }

    ///刪除
    public func deleteFromDb(fromTable table: DBTableName, where condition: Condition? = nil){
        do {
            try db?.delete(fromTable: table.rawValue, where:condition)
        } catch let error {
            debugPrint("delete error \(error.localizedDescription)")
        }
    }

    ///查詢
    public func qurey<T: TableDecodable>(fromTable table: DBTableName, where condition: Condition? = nil, orderBy orderList:[OrderBy]? = nil) -> [T]? {
        do {
            let allObjects: [T] = try (db?.getObjects(fromTable: table.rawValue, where:condition, orderBy:orderList))!
            debugPrint("\(allObjects)");
            return allObjects
        } catch let error {
            debugPrint("no data find \(error.localizedDescription)")
        }
        return nil
    }
    
    ///刪除數(shù)據(jù)表
    func dropTable(table: DBTableName) -> Void {
        do {
            try db?.drop(table: table.rawValue)
        } catch let error {
            debugPrint("drop table error \(error)")
        }
    }
    
    /// 刪除所有與該數(shù)據(jù)庫(kù)相關(guān)的文件
    func removeDbFile() -> Void {
        do {
            try db?.close(onClosed: {
                try db?.removeFiles()
            })
        } catch let error {
            debugPrint("not close db \(error)")
        }
        
    }
   
}

以上是基本的開(kāi)發(fā)使用功能, 如果需要更多更詳細(xì)的封裝使用, 可以參考一下官方文檔[wcdb github 地址](https://github.com/Tencent/wcdb](https://github.com/Tencent/wcdb) 真的超級(jí)詳細(xì).
)

完 !

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溜腐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耻卡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牲尺,死亡現(xiàn)場(chǎng)離奇詭異卵酪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)谤碳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)溃卡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蜒简,你說(shuō)我怎么就攤上這事瘸羡。” “怎么了搓茬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵犹赖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我卷仑,道長(zhǎng)峻村,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任锡凝,我火速辦了婚禮粘昨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘私爷。我一直安慰自己,他們只是感情好膊夹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布衬浑。 她就那樣靜靜地躺著,像睡著了一般放刨。 火紅的嫁衣襯著肌膚如雪工秩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音助币,去河邊找鬼浪听。 笑死,一個(gè)胖子當(dāng)著我的面吹牛眉菱,可吹牛的內(nèi)容都是我干的迹栓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼俭缓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼克伊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起华坦,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤愿吹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后惜姐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體犁跪,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年歹袁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坷衍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宇攻,死狀恐怖惫叛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逞刷,我是刑警寧澤嘉涌,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站夸浅,受9級(jí)特大地震影響仑最,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帆喇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一警医、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坯钦,春花似錦预皇、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至突颊,卻和暖如春鲁豪,著一層夾襖步出監(jiān)牢的瞬間潘悼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工爬橡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留治唤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓糙申,卻偏偏與公主長(zhǎng)得像宾添,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子郭宝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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