iOS Developer

swift中使用FMDB

2017-01-11  本文已影响105人  皮乐皮儿

iOS常用的第三方数据管理库就是FMDB了,这个库比较轻量级,而且使用起来非常方便,在学习swift的过程中,试过用SQLite3,然鹅过于繁琐和复杂,最终还是采用了桥接方式使用了OC库FMDB

1.首先导入FMDB库,这个就不多说了,有两种方法:1.用CocoaPods管理 2.手动下载导入

2.创建数据管理的类

    static let shared:DataBaseTool = DataBaseTool()
    
    var pathToDataBase:String!
    
    var dataBase:FMDatabase!
    
    override init() {
        super.init()
        let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
        pathToDataBase = documentDirectory.appending("dataBase.sqlite")
        createDataBase()
    }
}

3. 创建表,这里以创建用户表为例:

 func createDataBase() {
        dataBase = FMDatabase(path: pathToDataBase)

                if dataBase.open() {
                    let createUserMessageSQL = "create table if not exists UserMessageTab(userID text primary key,userName text,nickName text,avatarUrl text,userEmail text,userType int,sex int,createdAt text,updatedAt text,deviceId text,birthDay int,birthMonth int,birthYear int,emailBindStatus int,newsAuthToken text,thirdDetailList blob,thirdStyleList blob);"
                    do {
                        try dataBase.executeUpdate(createUserMessageSQL, values: nil)
                    } catch  {
                        print("用户信息表创建失败")
                    }
}

4. 插入数据

    //增加
    func saveUserMessageModel(userMessageModel:UserMessageModel) {
        
        if dataBase.open() {
            let model = UserMessageModel()
            var rs:FMResultSet!
            
            
            do {
               rs = try dataBase.executeQuery("SELECT * FROM UserMessageTab", values: nil)
            
                while rs.next() {
                    model.ID = rs.string(forColumn: "userID")
                }
                if model.ID != nil {
                    deleteUserMessage()
                }
                let thirdDetailData = NSKeyedArchiver.archivedData(withRootObject: userMessageModel.thirdDetailList)
                let thirdStyleData = NSKeyedArchiver.archivedData(withRootObject: userMessageModel.thirdStyleList)
                let parameters = [userMessageModel.ID!,userMessageModel.userName,userMessageModel.nickName,userMessageModel.avatarUrl,userMessageModel.userEmail,userMessageModel.userType,userMessageModel.sex,userMessageModel.createdAt,userMessageModel.updatedAt,userMessageModel.deviceId,userMessageModel.birthDay,userMessageModel.birthMonth,userMessageModel.birthYear,userMessageModel.emailBindStatus,userMessageModel.newsAuthToken,thirdDetailData,thirdStyleData] as [Any]
                
                let success:Bool = dataBase.executeUpdate("insert into UserMessageTab (userID, userName, nickName, avatarUrl, userEmail, userType, sex, createdAt, updatedAt, deviceId, birthDay, birthMonth, birthYear, emailBindStatus, newsAuthToken, thirdDetailList, thirdStyleList) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", withArgumentsIn: parameters)
//
                if success {
                print("插入数据成功")
                }else {
                print("插入数据失败")
                }
                
                dataBase.close()
                
            } catch  {
                
            }
            
        }
    }

5.删除数据:

    //删除
    func deleteUserMessage() {
        if dataBase.open() {
            if dataBase.executeUpdate("DELETE FROM UserMessageTab", withArgumentsIn: nil) {
               print("删除数据成功")
            }else {
               print("删除数据失败")
            }
            dataBase.close()
        }
    }

6.查询数据:

    func selectUserMessage() ->UserMessageModel {
        let model = UserMessageModel()

        if dataBase.open() {
            var rs:FMResultSet!
            
            
            do {
                rs = try dataBase.executeQuery("SELECT * FROM UserMessageTab", values: nil)
                
                while rs.next() {
                    model.ID = rs.string(forColumn: "userID")
                    model.userName = rs.string(forColumn: "userName")
                    model.nickName = rs.string(forColumn: "nickName")
                    model.avatarUrl = rs.string(forColumn: "avatarUrl")
                    model.userEmail = rs.string(forColumn: "userEmail")
                    model.newsAuthToken = rs.string(forColumn: "newsAuthToken")
                    model.userType = Int(rs.int(forColumn: "userType"))
                    model.sex = Int(rs.int(forColumn: "sex"))
                    model.createdAt = rs.string(forColumn: "createdAt")
                    model.updatedAt = rs.string(forColumn: "updatedAt")
                    model.deviceId = rs.string(forColumn: "deviceId")
                    model.birthDay = Int(rs.int(forColumn: "birthDay"))
                    model.birthMonth = Int(rs.int(forColumn: "birthMonth"))
                    model.birthYear = Int(rs.int(forColumn: "birthYear"))
                    model.emailBindStatus = Int(rs.int(forColumn: "emailBindStatus"))
                   let thirdStyleList = rs.data(forColumn: "thirdStyleList")
                   let thirdDetailList = rs.data(forColumn: "thirdDetailList")
                
                   if thirdStyleList != nil {
                    model.thirdStyleList = NSKeyedUnarchiver.unarchiveObject(with: rs.data(forColumn: "thirdStyleList")) as! [Any]
                   }
                   if thirdDetailList != nil {
                    model.thirdDetailList = NSKeyedUnarchiver.unarchiveObject(with: rs.data(forColumn: "thirdDetailList")) as! [Any]
                  }
            }
                
                dataBase.close()
                
            } catch  {
                
            }

        }
        return model
    }

7. 更新数据(这里换了个表):

    func updateConfigModel(configModel:ConfigModel) {
        let parameters = [configModel.adShowTime,configModel.adUrl,configModel.startLogo,configModel.iosShareText,configModel.adLogo,configModel.adEnable,configModel.IOS_WEAKUP_TIMES,configModel.SEARCH_WAP_URL] as [Any]
        
        let success:Bool = dataBase.executeUpdate("update ConfigTab set adShowTime=(?),adUrl=(?),startLogo=(?),iosShareText=(?),adLogo=(?),adEnabled=(?),IOS_WEAKUP_TIMES=(?),SEARCH_WAP_URL=(?);", withArgumentsIn: parameters)
        if success {
            print("更新配置数据成功")
        }else {
            print("更新配置数据失败")
        }

    }

增删改查大致这样就可以实现了,如果有比较好的swift风格的库或者处理数据的方法,欢迎大家一起学习沟通

上一篇下一篇

猜你喜欢

热点阅读