swift ios 数据库存储

swift ios 数据库存储,第1张

概述swift 之本地数据库CoreData http://www.jianshu.com/p/8eaddcac1fd5 _CoreData无法找到对应实体类问题: http://www.th7.cn/Program/IOS/201411/314502.shtml swift支持多线程 *** 作数据库类库-CoreDataManager: http://www.swiftmi.com/topic/35.ht

swift 之本地数据库CoreData
http://www.jianshu.com/p/8eaddcac1fd5
_CoreData无法找到对应实体类问题:
http://www.th7.cn/Program/IOS/201411/314502.shtml
swift支持多线程 *** 作数据库类库-CoreDataManager:
http://www.swiftmi.com/topic/35.html

canDB.swift框架
https://github.com/colatusso/canDB.swift
canDB.swift 是基于sqlite(FMDB)的iOS数据库框架,作用类似 nonsql 的数据库。通过FMDB使用sqlite,Just put the Json into the can and retrIEve it as a dictionary(只需把Json放置在can中,即可检索数据字典)。用法非常简单。

let dataArray:Array = (try! NSJsONSerialization.JsONObjectWithData(data!,options: NSJsONReadingOptions())) as! Array<Dictionary<String,AnyObject>>storeInstance.saveData("Person",data: dataArray,IDString: kCanDBDefaultIDString)这里存储的是array数组
 // singleton        let storeInstance = canDB.sharedInstance        // saving,indexing,reindexing new data         storeInstance.saveData("Person",data: dataArray,IDString: kCanDBDefaultIDString)        storeInstance.addindex("Person",indexes: ["name","Address.Home","Address.Work"])        storeInstance.reIndex("Person",IDString: kCanDBDefaultIDString)        // loading all data        let result = storeInstance.loadData("Person")        for item in result {            for (key,value) in (item as! NSDictionary) {                print("\(key): \(value)",terminator: "")                self.textVIEw?.text = self.textVIEw?.text.stringByAppendingString("\(key): \(value)\n")            }            self.textVIEw?.text = self.textVIEw?.text.stringByAppendingString("\n")        }        // loading data with custom query         let resultWithquery = storeInstance.loadDataWithquery("SELECT * FROM Person WHERE name='John'")        for item in resultWithquery {            for (key,terminator: "")            }        }        // remove methods        storeInstance.removeData("Person")        storeInstance.removeDataForID("Person",IDString: kCanDBDefaultIDString,IDsToDelete: ["19","17"])

canDB.swift 具体功能

import Foundationenum CanDBError: ErrorType {    case Error(String)}let kCanDBDefaultIDString = "ID"class canDB: NSObject {    static let sharedInstance = canDB()    var database = FMDatabase()    overrIDe init() {        super.init()    }    func execute(command: String) throws {        if !self.database.executeUpdate(command,withArgumentsInArray: nil) {            throw CanDBError.Error("CanDBError: \(self.database.lastErrorMessage())")        }    }    func openDatabase() throws {        let documentsFolder = NSSearchPathForDirectorIEsInDomains(.documentDirectory,.UserDomainMask,true)[0]         let path = documentsFolder + "/canDB.sqlite"        self.database = FMDatabase(path: path)        if !self.database.open() {            throw CanDBError.Error("error opening the database")        }    }    func createtable(tablename: String,IDString: String) throws {        do {            try self.execute("CREATE table IF NOT EXISTS " + tablename + " (_localID INTEGER PRIMARY KEY,\(IDString) TEXT,_JsonData TEXT);")        } catch CanDBError.Error(let message) {            throw CanDBError.Error(message)        } catch {            throw CanDBError.Error("unkNown error")        }    }    func addindex(tablename: String,indexes: NSArray) throws {        for index in indexes {            do {                try self.execute("ALTER table \(tablename) ADD ColUMN [\(index)] TEXT")            } catch CanDBError.Error(let message) {                throw CanDBError.Error(message)            } catch {                throw CanDBError.Error("unkNown error")            }        }    }    // todo: improve performance on reindexing big tables    func reIndex(tablename: String,IDString: String) throws {        let result = loadDataWithquery("SELECT * from \(tablename)")        do {            try self.saveData(tablename,data: result,IDString: IDString)        } catch CanDBError.Error(let message) {            throw CanDBError.Error(message)        } catch {            throw CanDBError.Error("unkNown error")        }    }    func saveData(tablename: String,data: NSArray,IDString: String) throws {        do {            try self.createtable(tablename,IDString: IDString);        } catch CanDBError.Error(let message) {            throw CanDBError.Error(message)        } catch {            throw CanDBError.Error("unkNown error")        }        let indexesArray = self.getIndexesFortable(tablename)        for record in data {            if !NSJsONSerialization.isValIDJsONObject(record) {                throw CanDBError.Error("invalID JsON")                return            }            let JsonData = try! NSJsONSerialization.dataWithJsONObject(record,options: NSJsONWritingOptions.PrettyPrinted)            let rawJsONString = Nsstring(data: JsonData,enCoding:NSUTF8StringEnCoding)            let ID: AnyObject! = record.objectForKey(IDString)            let selectquery = "SELECT * FROM \(tablename) WHERE \(IDString) = '\(ID)'"            let result = self.loadDataWithquery(selectquery)            if result.count > 0 {                // custom columns                var extraquery = ""                for indexname in indexesArray {                    if (!indexname.isEqualToString("_localID") && !indexname.isEqualToString("_JsonData") && !indexname.isEqualToString(IDString)) {                        extraquery += ",[\(indexname)] = '\(record.valueForKeyPath(indexname as! String)!)' "                    }                }                if !self.database.executeUpdate("UPDATE \(tablename) set _JsonData = :rawJson \(extraquery) WHERE \(IDString) = '\(ID)'",withParameterDictionary: ["rawJson": "\(rawJsONString!)"]) {                    throw CanDBError.Error(self.database.lastErrorMessage())                }            }            else {                // custom columns                var extraIndexes = ""                var extraValues = ""                for indexname in indexesArray {                    if (!indexname.isEqualToString("_localID") && !indexname.isEqualToString("_JsonData")) {                        extraIndexes += ",[\(indexname)]"                        extraValues  += ",'\(record.valueForKeyPath(indexname as! String)!)' "                    }                }                if !self.database.executeUpdate("INSERT INTO \(tablename) (_JsonData \(extraIndexes)) VALUES (:rawJson \(extraValues))",withParameterDictionary: ["rawJson": "\(rawJsONString!)"]) {                    throw CanDBError.Error(self.database.lastErrorMessage())                }            }        }    }    // remove all the data from a table    func removeData(tablename: String) throws {        do {            try self.execute("DELETE FROM \(tablename)")        } catch CanDBError.Error(let message) {            throw CanDBError.Error(message)        } catch {            throw CanDBError.Error("unkNown error")        }    }    // remove specific records    func removeDataForID(tablename: String,IDString: String,IDsToDelete: NSArray) throws {        var IDs = ""        IDsToDelete.enumerateObjectsUsingBlock { (object,index,stop) -> VoID in            if index == 0 { IDs = (object as! String) }            else if index == (IDsToDelete.count - 1) { IDs = IDs + "," + (object as! String) }            else { IDs = IDs + "," + (object as! String)}        }        do {            try self.execute("DELETE FROM \(tablename) where \(IDString) in ( \(IDs) )")        } catch CanDBError.Error(let message) {            throw CanDBError.Error(message)        } catch {            throw CanDBError.Error("unkNown error")        }    }    func loadData(tablename: String) -> NSArray {        let query = "SELECT _JsonData from \(tablename)"        let resultSet = self.database.executequery(query,withArgumentsInArray: nil)        let result: NSMutableArray = []        while resultSet.next() {            let JsonString = resultSet.stringForColumn("_JsonData")            let JsonData: NSData = JsonString.dataUsingEnCoding(NSUTF8StringEnCoding)!            let Json: AnyObject = try! NSJsONSerialization.JsONObjectWithData(JsonData,options: [])            let JsonDictionary = Json as? NSDictionary            result.addobject(JsonDictionary!)        }        return result as NSArray    }    // you can specify the query,but the result will be the _JsonData parsed into NSDictionary    func loadDataWithquery(query: String) -> NSArray {        let resultSet = self.database.executequery(query,options: [])            let JsonDictionary = Json as? NSDictionary            result.addobject(JsonDictionary!)        }        return result as NSArray    }    func loadRawDataWithquery(query: String) -> NSArray {        let resultSet = self.database.executequery(query,withArgumentsInArray: nil)        let result: NSMutableArray = []        while resultSet.next() {            result.addobject(resultSet.resultDictionary())        }        return result as NSArray    }    // helper    func getIndexesFortable(tablename: String) -> NSMutableArray {        // get the extra indexes        let indexes = self.database.executequery("PRAGMA table_info(\(tablename))",withArgumentsInArray: nil)        let indexesArray: NSMutableArray = []        while indexes.next() {            let indexname = indexes.objectForColumnname("name") as! String            indexesArray.addobject(indexname)        }        return indexesArray    }}
总结

以上是内存溢出为你收集整理的swift ios 数据库存储全部内容,希望文章能够帮你解决swift ios 数据库存储所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1074576.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存