美文网首页
IOS FMDB 使用记录

IOS FMDB 使用记录

作者: 派大星的博客 | 来源:发表于2018-11-12 17:57 被阅读5次

    Sqlite :

    import UIKit
    import FMDB
    
    let DEFAULTS_KEY_IS_CREATETABLE = "DEFAULTS_KEY_IS_CREATETABLE"
    
    class DBManager: NSObject {
        static let shareInstance = DBManager()
        var db : FMDatabase?
        
        var createTableDone : Bool {
            get {
                return UserDefaults.standard.bool(forKey: DEFAULTS_KEY_IS_CREATETABLE)
            }
            set {
                UserDefaults.standard.set(newValue, forKey: DEFAULTS_KEY_IS_CREATETABLE)
                UserDefaults.standard.synchronize()
            }
        }
        
        func openDB(dbName : String){
            ///给路径后面加一个!
            let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last!
            print(path)
            ///创建一个dbBase的数据库的对象
            db = FMDatabase(path:"\(path)/\(dbName)")
            ///判断是否创建成功,需要强制解包
            if db!.open() {
                print("数据库创建成功")
            }else{
                print("数据库创建失败")
            }
        }
        
        func initDataToDB() {
            let path = Bundle.main.path(forResource: "3000", ofType: "json")
            do
            {
                let jsonString = try String(contentsOfFile: path!, encoding: String.Encoding.utf8)
                let jsonData = jsonString.data(using: String.Encoding.utf8)
                
                if  jsonData == nil {
                    return
                }
                
                let json = try JSONSerialization.jsonObject(with: jsonData!, options: JSONSerialization.ReadingOptions.mutableLeaves) as! NSArray
                
                for item in json {
                    if let tmpStr = item as? String {
                        insertTable(word: tmpStr)
                    }
                }
            }
            catch let aError as NSError
            {
                print(aError.description)
            }
        }
        
        func createTable() {
            if let tmpDb = db {
                if tmpDb.open() {
                    let createTableStr = "create table if not exists my_vocabulary(word varchar primary key,initial char,know bool,repeat_count int)"
                    let t = tmpDb.executeUpdate(createTableStr, withArgumentsIn: [])
                    if t {
                        print("createTable成功")
                    } else {
                        print("createTable失败")
                    }
                }
            }
        }
        
        func insertTable(word: String) {
            let initial = String(word.first!)
            let insertSql = "insert into my_vocabulary(word,initial,know,repeat_count) values(?,?,?,?)"
            
            if let tmpDb = db {
                if tmpDb.open() {
                    let t = tmpDb.executeUpdate(insertSql, withArgumentsIn: [word,initial,true,1])
                    if t {
                        print("insertSql成功")
                    } else {
                        print("insertSql失败")
                    }
                }
            }
        }
        
        func updateTableWordCount(word: String) {
            let initial = String(word.first!)
            let insertSql = "insert into my_vocabulary(word,initial,know,repeat_count) values(?,?,?,?)"
            if let tmpDb = db {
                if tmpDb.open() {
                    let t = tmpDb.executeUpdate(insertSql, withArgumentsIn: [word,initial,true,1])
                    if t {
                        print("\(word) 插入成功")
                    } else {
                        print("\(word) 重复 更新")
                        let updateSql = "UPDATE my_vocabulary SET repeat_count = repeat_count + 1 WHERE word LIKE \'\(word)\'"
                        let update = tmpDb.executeUpdate(updateSql, withArgumentsIn: [word,initial,true,1])
                        if update {
                            print("\(word) 更新成功")
                        } else {
                            print("\(word) 更新失败")
                        }
                    }
                }
            }
        }
        
        func queryTable(page: Int) -> [WordItem]? {
            var resultArray : [WordItem] = []
            var sqlString = String()
            sqlString = "SELECT * FROM my_vocabulary AS TD ORDER BY TD.repeat_count DESC LIMIT \(page * 100),100"  // "SELECT * FROM my_vocabulary AS TD ORDER BY TD.word ASC LIMIT 1,20"
            guard let set = try? db?.executeQuery(sqlString, values: []) else {
                return nil
            }
            while (set?.next())! {
                let model = WordItem()
                model.word = set?.string(forColumn: "word")
                model.isKnown = set?.bool(forColumn: "know")
                model.repeatCount = Int((set?.int(forColumn: "repeat_count"))!)
                resultArray.append(model)
            }
            set?.close()
            return resultArray
        }
    }
    

    相关文章

      网友评论

          本文标题:IOS FMDB 使用记录

          本文链接:https://www.haomeiwen.com/subject/prztxqtx.html