Swift-FMDB實(shí)戰(zhàn)

iOS中如果本地緩存數(shù)據(jù)庫使用的SQLite,絕大數(shù)人都使用了FMDB,可以算是標(biāo)配.如果自己對(duì)SQLite原生態(tài)的開發(fā)方式效率太低,使用FMDB會(huì)有種鳥槍換炮的感覺.FMDB相比于原生態(tài)的SQLite的查詢做出了很多優(yōu)化,查詢更新方法非常簡(jiǎn)單易用.

FMDB配置

新建Swift項(xiàng)目,下載FMDB項(xiàng)目,將以下四個(gè)文件添加至新的項(xiàng)目中:


FlyElephant.png

數(shù)據(jù)庫初始化:

class DataManager {
    
    static let shareIntance:DataManager = DataManager()
    
    var db:FMDatabase = FMDatabase()
    
    func createDataBase(dataName:String) {
        
        let path:String = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0]
        
        let finalPath:String = path.appending("/\(dataName)")
        
        print("數(shù)據(jù)存儲(chǔ)地址:\(finalPath)")
        
        db = FMDatabase(path: finalPath)
        
        if db.open() {
            print("數(shù)據(jù)庫打開成功")
        }
    }
    
}

訂單表中相比之前變化不大,查詢方法有所優(yōu)化:

class Order {
    
    var db:FMDatabase = DataManager.shareIntance.db
    
    var orderName:String = ""
    var orderNumber:Int = 0
    
    // 創(chuàng)建訂單表
    func createTable()  {
        let createTableSQL = "CREATE TABLE IF NOT EXISTS 't_order' ('id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'orderName' TEXT,'orderNumber' INTEGER);"
        
        let result = db.executeUpdate(createTableSQL, withArgumentsIn: nil)
        
        if result {
            print("創(chuàng)建表格成功")
        }
    }
    
    // MARK:- 插入數(shù)據(jù)
    func insertOrder() {
        let insertSQL = "INSERT INTO t_order (orderName, orderNumber) VALUES (\"\(self.orderName)\", \(self.orderNumber));"
        
        let result = db.executeUpdate(insertSQL, withArgumentsIn: nil)
        
        if result {
            print("數(shù)據(jù)新增成功")
        }
    }
    
    func searchData() {
        let querySQL = "SELECT * FROM t_order"
        
        var resultSet:FMResultSet?
        
        do {
            try resultSet =  db.executeQuery(querySQL, values: nil)
            
            while (resultSet?.next())! {
                let name = resultSet?.string(forColumn: "orderName")
                let number = resultSet?.int(forColumn: "orderNumber")
                print("訂單編號(hào):\(number!)--訂單名稱:\(name!)")
            }
        } catch {
            
        }
        
    }
    
    func deleteData() {
        let deleteSQL = "DELETE FROM t_order WHERE id = 1"
        
        let result = db.executeUpdate(deleteSQL, withArgumentsIn: nil)
        
        if result {
            print("數(shù)據(jù)刪除成功")
        }
    }
    
    func updateData() {
        let updateSQL = "UPDATE t_order SET orderName = '花生' WHERE id = 1"
        
        let result = db.executeUpdate(updateSQL, withArgumentsIn: nil)
        
        if result {
            print("修改成功")
        }
    }
}

實(shí)際測(cè)試

關(guān)于字段SQL語句網(wǎng)上有很多,基本上差別不大,完全看自己的業(yè)務(wù)情況,通過簡(jiǎn)單查詢,刪除,更新來驗(yàn)證代碼:


FlyElephant.png
 override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        let dataManager:DataManager = DataManager.shareIntance
        
        dataManager.createDataBase(dataName: "FlyElephant.sqlite")
        
        let order = Order()
        order.createTable()
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    
    @IBAction func addAction(_ sender: UIButton) {
        for i in 0...10 {
            let order:Order = Order()
            order.orderNumber = i
            order.orderName = "FlyElephant-\(i)"
            order.insertOrder()
        }
    }
    
    @IBAction func updateAction(_ sender: UIButton) {
        let order:Order = Order()
        order.updateData()
    }
    
    @IBAction func searchAction(_ sender: UIButton) {
        let order:Order = Order()
        order.searchData()
    }
    
    @IBAction func deleteAction(_ sender: UIButton) {
        let order:Order = Order()
        order.deleteData()
    }

測(cè)試結(jié)果如下:


Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,219評(píng)論 25 708
  • ———————————————————————————瞿三 每一樁婚姻都是兩個(gè)個(gè)體的觀點(diǎn)、個(gè)性怪癖和價(jià)值觀的結(jié)合,...
    瞿三閱讀 318評(píng)論 0 2
  • 定義 HTML 表格alian table 與其周圍文字的對(duì)齊方式值 left right center...
    小飛俠zzr閱讀 226評(píng)論 0 0
  • 快到九月一了,又要到了一年一度開學(xué)的日子。 一個(gè)星期以前學(xué)校的官網(wǎng)公眾號(hào)就開始推送關(guān)于報(bào)道的消息,新學(xué)期的課程表也...
    盈昃閱讀 572評(píng)論 0 0
  • 很多大學(xué)生問:想找兼職,什么兼職能賺到錢?每次面對(duì)這樣的問題,都會(huì)很簡(jiǎn)單告訴他們:除非你真的很需要錢去支付大學(xué)的生...
    糙人張張張閱讀 1,099評(píng)論 0 3

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