swift中使用FMDB

作者: 皮乐皮儿 | 来源:发表于2017-01-11 14:45 被阅读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风格的库或者处理数据的方法,欢迎大家一起学习沟通

相关文章

  • SQLite.swift

    SQLite.swift 建表 FMDB 建表 SQLite.swift 批量插入 FMDB 批量插入 在主线程中...

  • [Realm-Swift] 数据库的使用详解

    swift开发需要应用数据库,fmdb笔记繁琐,在swift中准备放弃使用,看到了 Realm这个三方框架很强大,...

  • swift FMDB使用

    FMDB特性: FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API...

  • 拿走即用之FMDB

    FMDB 框架使用(作者离职,求一份工作) 将 fmdb 文件夹拖入项目 建立桥接文件 将 Swift exten...

  • FMDB在swift中的使用

    1.什么是FMDB 由于iOS中使用C语言函数对原生SQLite数据库进行增删改查操作,复杂麻烦,所以就出现了一系...

  • [Swift]在swift中使用FMDB

    FMDB在OC中使用较多, 来到swift的世界,依然不想放弃他,下面就来看一下如何在swift中使用; 说明: ...

  • ios组件化遇到的问题-三方库file not found

    情景:组件化开发下,用pod安装了FMDB库 ,但是不管是在.swift中import FMDB还是在.m中 #i...

  • FMDB从理论到实战(swift4)

    理论篇 本文默认你已经在项目中继承了FMDB,如果是swift项目,已经在swift中引入桥接文件并添加了FMDB...

  • FFDB

    FMDB的使用 FMDBDemo 目录 1、FMDB介绍2、FMDB导入3、FMDB框架中重要的框架类3.1、FM...

  • swift中使用FMDB

    iOS常用的第三方数据管理库就是FMDB了,这个库比较轻量级,而且使用起来非常方便,在学习swift的过程中,试过...

网友评论

    本文标题:swift中使用FMDB

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