首页 > 其他分享 >Swift基础之对FMDB第三方的使用方法

Swift基础之对FMDB第三方的使用方法

时间:2022-11-28 17:02:37浏览次数:41  
标签:name self db FMDB buttonN let sql Swift 第三方


相信大家都熟悉OC使用FMDB第三方库,进行数据库操作,增、删、改、查,现在我就来利用代码展示一下Swift对此库的使用方法,我是通过Pods添加的第三方库,如果手动添加记得创建桥接文件,在文件中调用头文件。如果不会的可以看我以前的文章里有介绍Swift调用OC文件

Swift基础之对FMDB第三方的使用方法_数据库

如果不知道FMDB的这里再简单的介绍一下:

FMDB是一个和iOS的SQLite数据库操作相关的第三方框架。主要把C语言操作数据库的代码用OC进行了封装。使用者只需调用该框架的API就能用来创建并连接数据库,创建表,查询等。轻量级,灵活。不消耗太多性能,FMDB将C语言的iOS系统的SQLite数据库的操作代码用OC进行封装,面向对象,容易理解和使用,提供了线程不安全的解决方案。重要的类:FMDatabase数据库类、FMResultSet结果集、FMDatabaseQueue线程类等。

首先创建一个表格,添加四个按钮,分别是增加、删除、修改、查询

代码如下:

myTableView = UITableView.init(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-50), style: .Plain);
        myTableView.rowHeight = 60;
        myTableView.delegate = self;
        myTableView.dataSource = self;
        self.view.addSubview(myTableView);
        
        let arr:NSArray = ["增加","删除","修改","查询"];
        let widthF:CGFloat = self.view.frame.size.width/4;
        
        for i in 0...arr.count-1 {
            let buttonN = UIButton.init(frame: CGRectMake(widthF*CGFloat(i), self.view.frame.size.height-50, widthF, 50));
            buttonN.setTitle(arr[i] as? String, forState: .Normal);
            buttonN.setTitleColor(UIColor.blueColor(), forState: .Normal);
            buttonN.backgroundColor = UIColor.lightGrayColor();
            buttonN.titleLabel?.adjustsFontSizeToFitWidth = true;
            buttonN.tag = i+100;
            buttonN.addTarget(self, action: #selector(btnClick), forControlEvents: .TouchUpInside);
            self.view.addSubview(buttonN);
        }

然后是创建一个数据库的管理类,这里我们可以创建一个包含线程的类,这样对数据操作时,不易出错

FMDBQueueManager.swift文件中的代码:

func openDB(dbName : String){
        
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        print(path)
        dbQueue = FMDatabaseQueue(path: "\(path)/\(dbName)")
        
        createTable()
    }
    
    func createTable () {
        let sql = "CREATE TABLE IF NOT EXISTS contact_people ('id' integer NOT NULL,'name' text NOT NULL,'phoneNum' text NOT NULL,PRIMARY KEY('id'))"
        dbQueue?.inDatabase({ (db) -> Void in
            try! db.executeUpdate(sql, values: [])
        })
    }

创建一个对数据库操作的Model类,FMDBModel.swift

//注意SQL语句的书写方式
    //增加数据
    func insert(){
        
        let sql = "INSERT INTO contact_people (name, phoneNum) values ('\(self.name!)', '\(self.phoneNum!)')"
        //下面的写法存在线程不安全的问题
        //       try! FMDBManager.ShareManager.db?.executeUpdate(sql, values: [])
        
        ///下面的写法是线程安全的写法
        FMDBQueueManager.shareFMDBQueueManager.dbQueue?.inDatabase({ (db) ->Void in
            
            try! db.executeUpdate(sql, values: [])
        })
    }
    //删除数据
    func delete(){
        let sql = "delete from contact_people"
        FMDBQueueManager.shareFMDBQueueManager.dbQueue?.inDatabase({ (db) -> Void in
            try! db.executeUpdate(sql, values: [])
        })
    }
    //更新数据
    func update(){
        let sql = "update contact_people set name = '\(self.name!)' where phoneNum = '12345678'"
        FMDBQueueManager.shareFMDBQueueManager.dbQueue?.inDatabase({ (db) -> Void in
            try! db.executeUpdate(sql, values: [])
        })
    }
    //查询数据
    class func query() -> [[String : AnyObject]]{
        
        let sql = "SELECT * FROM contact_people"
        var resultArray: [[String : AnyObject]] = []
        
        FMDBQueueManager.shareFMDBQueueManager.dbQueue?.inDatabase({ (db)->Void in
            
            ///执行查询
            if let result = try? db.executeQuery(sql, values: []){
                ///遍历查询后的数据
                while result.next(){
                    ///获取数据
                    let nameStr = result.stringForColumn("name")
                    let phoneNumStr = result.stringForColumn("phoneNum")
                    let dict = ["name": nameStr, "phoneNum": phoneNumStr]
                    resultArray.append(dict)
                }
            }
        })
        ///查找到数据后将数据返回
        return resultArray
    }
}

这些工作结束后,就可以在界面中进行操作,源代码请自行下载,如果有问题请留言,谢谢....



标签:name,self,db,FMDB,buttonN,let,sql,Swift,第三方
From: https://blog.51cto.com/u_15894905/5892265

相关文章

  • Swift基础之PickerView(时间)选择器
    代码讲解:(后面有额外代码讲解)首页设计UIPickerView的样式设计:leftArray=["花朵","颜色","形状"];              letarray1=["茉莉","玫瑰","郁金香"......
  • Swift基础之仿资讯类实现频道的长按拖拽/删除/增加
    导读简单用Swift写了一个collectionview的拖拽点击排序效果;拖拽排序是新闻类的App可以说是必有的交互设计,如今日头条,网易新闻等。效果效果主要代码手势长按移动1.......
  • Swift基础之设计折线坐标图
    最近添加了折线视图的样式,所以在这里用Swift语言重新再使用设计一下首先设置纵坐标的数值是:体重//体重       letweightLabel=UILabel.init(frame:CGRectMake(0......
  • 第三方Charts绘制图表四种形式:饼状图,雷达图,柱状图,直线图
    对于第三方框架Charts(Swift版本,在OC项目中需要添加桥接头文件),首先要解决在项目中集成的问题,集成步骤:一、下载Charts框架下载地址:​​https://github.com/danielgindi/Char......
  • 使用第三方IQKeyboardManager处理键盘问题
    这个库的下载地址:https://github.com/hackiftekhar/IQKeyboardManagerIQKeyboardManager的初始化当IQKeyboardManager初始化的时候,它做了这么几件事情:1.监听有关键盘的......
  • 非常强大的第三方授权登录的工具类库!
    非常强大的第三方授权登录的工具类库!关注什么是JustAuth?JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So......
  • Swift 周报 第十七期
    前言本期是Swift编辑组自主整理周报的第八期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋......
  • 关于第三方库中的 "type" 配置项
    注意,它写了"type":"module"这个配置,就是规定只允许ESM规范引入,反亦。但是,如果没有写这个配置项,那就是两种都可以例子:jsencrypt3.3.1与jsencrypt3.2.1......
  • 第三方检测中—人工测试无法被取代的理由
    ​有些开发团队十分推崇自动化测试,不可否认,自动化测试在回归测试和检查冗余组件方面不失为安全有效的方法。但是我们更应该坚信探索性的手动测试。虽然自动化测试变得越来越......
  • 修改第三方组件库样式
    用插槽时,自己插入的元素,则在自己的作用域中直接修改这个元素全局定义一个变量,覆盖它默认的值,但这样会全局修改局部定义一个变量,覆盖它的默认值直接找到组件选择器,使用:......