sqlite系列(2)使用FMDB保存數據swift

1.創建一個數據庫的工具類

import UIKit
import FMDB
class XBDataManger: NSObject {
    //單例
    static let shareInstance : XBDataManger = XBDataManger()
    //創建一個隊列(線程安全的隊列)
    var queue : FMDatabaseQueue?
    
    var db : FMDatabase?
     //打開數據庫
    func openDB()
    {
        let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!
        let filePath = (path as NSString).stringByAppendingPathComponent("status.db")
        
       //print(filePath)
        
        
        queue = FMDatabaseQueue(path: filePath)
        //創建表
        
        
        createTable()
    }
    private func createTable(){
        let sql = "CREATE TABLE 'T_status' ( 'status' text,'statusid' integer NOT NULL,'userid' integer,PRIMARY KEY('statusid'))"
        queue?.inDatabase({ (db) -> Void in
            //執行代碼
            db.executeUpdate(sql, withArgumentsInArray: nil)
        })
        
    }
    
}


2.保存數據的接口

    func saveData(array : [[String : NSObject]])
    {
        let sql = "insert into T_status (statusId,status,userId) VALUES (?,?,?)"
        
        //遍歷去取得數據
        for dic in array
        {
            let statusId = dic["idstr"]
            
            //把字典轉換爲字符串   先轉換成data通過<span style="font-family: Arial, Helvetica, sans-serif;">NSJSONSerialization.dataWithJSONObject</span><span style="font-family: Arial, Helvetica, sans-serif;">來實現</span>
            let data = try! NSJSONSerialization.dataWithJSONObject(dic, options: NSJSONWritingOptions(rawValue: 0))
            let str = NSString(data: data, encoding: NSUTF8StringEncoding)
            
            
            //插入數據  支持事務
            XBDataManger.shareInstance.queue?.inTransaction({ (db, rollback) -> Void in
               if db.executeUpdate(sql, withArgumentsInArray: [statusId!,str!,XBUserViewModel.shareInstance.usermodel!.uid!])
               {
                print("插入成功!")
                }
               else {
                print("插入失敗!")
                }
            })
            
        }
        
        
    }

3.加載數據庫中數據

主要步驟  : 拼接sql    執行sql    遍歷結果集合   字典轉模型

    func loadCacheStatus(since_id : Int,max_id : Int,finish : ([[String : NSObject]])->())
    {
        //根據sinceId he max_id 來進行 sql語句的拼接
        var sql = "SELECT statusId,status FROM T_status \n" +
        "WHERE userId = '\(XBUserViewModel.shareInstance.usermodel!.uid!)'\n"
        
        if(since_id > 0)
        {
            sql += "AND statusId > \(since_id) \n"
        }
        else if(max_id > 0)
        {
            sql += "AND statusId < \(since_id) \n"
        }
        
        sql += "ORDER BY statusId DESC LIMIT 20"
        
        //print(sql)
        //查詢操作
        XBDataManger.shareInstance.queue?.inTransaction({ (db, _) -> Void in
            let result = db.executeQuery(sql, withArgumentsInArray: nil)
            var array = [[String : NSObject]]()
            while result.next()
            {
                let str = result.stringForColumn("status")
                //通過字符串來轉換成字典  
                let data = str.dataUsingEncoding(NSUTF8StringEncoding)
                
                //轉換成字典
                let dic = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(rawValue: 0))
                array.append(dic as! [String : NSObject])
                
            }
            //完成回調
            finish(array)
        })
    }
4.  去網絡加載數據接口

    func loadData(since_id : Int = 0,max_id : Int = 0,success : (count : Int)->(),fail : (error : NSError)->())
    {
<span style="white-space:pre">	</span>//先去數據庫加載,然後再去網絡中加載數據
         self.loadCacheStatus(since_id, max_id: max_id) { (dataArray) -> () in
<span style="white-space:pre">	</span>    
            if dataArray.count > 0
            {
                //遍歷字典轉模型 
                for dic in dataArray
                {
                   let statu = XBStatus(dic: dic)
                    self.StatusArray?.append(statu)
                }
                success(count: -1)
            }
            else
            {
                //去網絡上加載數據
            }
        }
    }







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章