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)
})
}
}
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
{
//去網絡上加載數據
}
}
}