Swift基础之对FMDB第三方的使用方法
相信大家都熟悉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第三方的使用方法的更多相关文章
- python基础-7模块,第三方模块安装方法,使用方法。sys.path os sys time datetime hashlib pickle json requests xml
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- swift基础:第六部分:类与对象
http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...
- swift基础:第二部分:函数和闭包
今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...
- Swift基础语法学习总结(转)
Swift基础语法学习总结 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...
- Swift基础语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...
- swift -- 基础
swift -- 基础 1.常量和变量 常量: let 变量: var 2.声明常量和变量 常量的声明: let let a = 1 //末尾可以不加分号,等号两边的空格必须对应(同 ...
- Swift基础语法
简介 特点 (1)优于OC,快速,安全 (2)取消了预编译指令包括宏定义(OC用的太多了) (3)取消了OC指针和不安全访问的使用(看不到星星了) (4)舍弃 Objective-C 早期应用 Sma ...
- iOS Swift 模块练习/swift基础学习
SWIFT项目练习 SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图 +控件 1.UIImag ...
- Swift基础学习
Swift基础学习 http://c.biancheng.net/cpp/html/2242.html 这个网站最近看了一下,对于基本语法解释概括的相对全面,如同重新练习一遍OC似的,挺全面的,谢谢 ...
随机推荐
- P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解
1.内容概述 P2P即点对点通信,或称为对等联网,与传统的服务器客户端模式(如下图"P2P结构模型"所示)有着明显的区别,在即时通讯方案中应用广泛(比如IM应用中的实时音视频通信. ...
- Python 中的 if __name__ == '__main__' 该如何理解
__name__ 表示当前模块名, __main__ 表示正在运行的模块名. if __name__ == '__main__' 这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导 ...
- 阿里 & 酷家乐:实习生面试
最近海投了十家公司,暂时有阿里两面(已凉).酷家乐两面(大概凉了).网易一面.前两个都是基础知识发挥得还可以,两家公司二面都凉凉. 阿里一面(3.21 26min) 刚好买了中饭回宿舍打开正准备吃的时 ...
- class-map与policy-map 配置与qos模版
将subnet-a 与subnet-b 归入类class1 中.Router1(config)# ip access-list extended subnet-a Router1(config-std ...
- Timestamp转Calendar
Timestamp scheduleTime = r.getTimestamp("time_recv"); Calendar calendarScheduleTime = Cale ...
- h5 网页版的微博微信QQ登录
一:微博 1,先说微博吧,首先你的去http://open.weibo.com/wiki/先注册账号,通过验证审核.然后的创建网页应用.微博审核不通过的原因就是域名和网站地址,一定要按实际写的.一定要 ...
- BlockingQueue阻塞队列(解决多线程中数据安全问题 可用于抢票,秒杀)
案例:一个线程类中 private static BlockingQueue<Map<String, String>> dataQueue = new LinkedBlocki ...
- 利用 Win32 启动和检测 UWP App 的方法
一种启动和检测 UWP 应用的方法 背景 我们发布过多款 UWP 平台的同类型 App ,最近有一个需求:用传统 Win32 程序启动我们的 UWP 程序.因为我们的每一个UWP App在客户机器上都 ...
- EXISTS的使用详解
.exists的使用场合: exists 用于只能用于子查询,可以替代in,若匹配到结果,则退出内部 查询,并将条件标志为true,传回全部结果资料,in 不管匹配到匹配不到都 全部匹配完毕,使用ex ...
- 【python标准库模块一】时间模块time学习
本文介绍python的标准库模块time的常见用法 时间模块time 导入时间模块 import time 得到时间戳,这是统计从1970年1月1日0点0分到现在经过了多少秒,一般用于加减法一起用,比 ...