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

效果图:

如果不知道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
    }
}

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

源代码:http://download.csdn.net/detail/hbblzjy/9660218

Swift基础之对FMDB第三方的使用方法的更多相关文章

  1. python基础-7模块,第三方模块安装方法,使用方法。sys.path os sys time datetime hashlib pickle json requests xml

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  2. swift基础:第六部分:类与对象

    http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...

  3. swift基础:第二部分:函数和闭包

    今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...

  4. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  5. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  6. swift -- 基础

    swift -- 基础 1.常量和变量 常量: let 变量: var 2.声明常量和变量 常量的声明: let let  a = 1         //末尾可以不加分号,等号两边的空格必须对应(同 ...

  7. Swift基础语法

    简介 特点 (1)优于OC,快速,安全 (2)取消了预编译指令包括宏定义(OC用的太多了) (3)取消了OC指针和不安全访问的使用(看不到星星了) (4)舍弃 Objective-C 早期应用 Sma ...

  8. iOS Swift 模块练习/swift基础学习

    SWIFT项目练习     SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图  +控件 1.UIImag ...

  9. Swift基础学习

    Swift基础学习  http://c.biancheng.net/cpp/html/2242.html 这个网站最近看了一下,对于基本语法解释概括的相对全面,如同重新练习一遍OC似的,挺全面的,谢谢 ...

随机推荐

  1. [ZJOI2008]瞭望塔

    题目描述 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安. 我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), ...

  2. bzoj 4919: [Lydsy六月月赛]大根堆

    Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质: ...

  3. ●BZOJ 2743 [HEOI2012]采花

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 题解: 树状数组,离线 求区间里面有多少种出现次数大于等于 2 的颜色. 类似某一个题 ...

  4. SQL Server 2008 维护计划实现数据库备份(最佳实践)

    一.背景 之前写过一篇关于备份的文章:SQL Server 维护计划实现数据库备份,上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划 ...

  5. SQL 收缩数据库日志的几种办法 (2005与2008 略有区别)

    在SQL Server 2000/2005中可以快速压缩日志log文件,通过SQL, 方法一: ---DBTEST 为数据库名,顺序最好别乱.注意:要先截断再清空,最后收缩! backup log D ...

  6. MySql查询不区分大小写解决方案(两种)

    当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感. 解决方案一: 于是怀疑Mysql的问题.做个实验:直接使用客户端用sql查 ...

  7. linux修改root账户的用户名所得的教训

    之前linux服务器的密码被别人改过, 然后叫服务器相关的负责人重置了root账户(服务器负责人在客户所在公司), 重置好之后, 领导叫更改下root 用户名和密码, 于是我二话不说就开始找方法, 找 ...

  8. width:100vh有感而发

    在看一个网页的代码是看到 width:100vh  纳尼...这这我怎么没有见过,这是个什么属性,随之有看到 min-height:calc(100vh + 51px);这尼玛又是怎么用的.... 感 ...

  9. include和require的区别比较

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

  10. jsp&servlet初体验——用户登录功能实现

    数据库准备-创建db_login数据库  t_user表 1.创建web工程 2.创建用户model   user.java package com.gxy.model; public class U ...