sqlite第三方类库FMDB的使用
FMDB是ios平台下解析sqlite的第三方数据库管理框架,使用非常方便,而且提供了多线程安全的数据库操作,相比coredata来说更加灵活和轻量级。
fmdb主要有三个类别:
fmdatabase:用来执行sql语句;
fmresultset:用来使用fmdatabase执行查询后的结果集合
fmdatabasequeue:用来在多线程中查询和更新数据,它是线程安全的。
需要注意的是,在iOS环境下,只有document directory 是可以进行读写的。
fmdb的使用
1.在新建的项目中,导入libsqlite3的动态数据库:
注:(在Building Phases中的Link Binary WithLibraries中添加)
2.加入第三方框架fmdb中的这些主要文件:
3.在代码中建立一个数据库,并指定文件路径:
1 //指定沙盒路径 2 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 3 //在指定沙盒路径下添加sqlite文件 4 NSString *filepath = [path stringByAppendingPathComponent:@"moxue.sqlite"]; 5 //在指定path路径下创建数据库 6 FMDatabase *db = [FMDatabase databaseWithPath:filepath]; 7 //查看是否打开成功 8 if (![db open]) { 9 return; 10 }else{ 11 NSLog(@"打开成功"); 12 }
4.在代码中添加列表和列表属性:(表格的参数不能是id(大小写都不可以),否则会出现创建表格失败,因为表格在创建时,表格会自动生成一个id属性)
1 //在数据库中创建一个列表,并添加列表属性 2 BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS data(id INTEGER PRIMARY KEY AUTOINCREMENT,Title TEXT,date TEXT,Context TEXT,Url TEXT)"]; 3 if (result) { 4 NSLog(@"创建data表成功"); 5 }else{ 6 NSLog(@"创建data表失败"); 7 }
注意:(表名不能是变量),否则会创建表格失败或为空,正确的写法为:
NSString *sql = [NSString stringWithFormat:@"select * from %@", tableName]; FMResultSet *rs = [db executeQuery:sql];
5.在列表中插入数据:
1 //插入数据 2 BOOL res = [db executeUpdate:@"INSERT INTO data (Title,date,Context,Url) VALUES(?,?,?,?)",@"墨雪",@"2015-10-11",@"我的表格",@"我的Url"]; 3 BOOL res1 = [db executeUpdate:@"INSERT INTO data (Title,date,Context,Url) VALUES(?,?,?,?)",@"刘庆",@"2015-10-10",@"刘庆的表格",@"刘庆的Url"]; 4 if (res1) { 5 NSLog(@"插入data成功"); 6 }else{ 7 NSLog(@"插入data表失败"); 8 }
6.在类表中删除数据或者列表:
1 BOOL dele = [db executeUpdate:@"DROP TABLE IF EXISTS data"]; 2 BOOL dele1 = [db executeUpdate:@"delete from data where Title = '墨雪'"]; 3 if (dele) { 4 NSLog(@"删除数据成功"); 5 }else{ 6 NSLog(@"删除数据失败"); 7 }
7.在列表中修改数据:
1 //修改数据 2 BOOL UPDATE = [db executeUpdate:@"update data SET Title = '哈哈' WHERE id = 1" ]; 3 if (UPDATE) { 4 NSLog(@"修改成功"); 5 }else{ 6 NSLog(@"修改失败"); 7 }
8.在列表中查询数据:
1 //查询数据 2 FMResultSet *RS = [db executeQuery:@"SELECT Title from data"]; 3 while ([RS next]) { 4 NSString *name = [RS stringForColumn:@"Title"]; 5 NSLog(@"%@",name); 6 }
9. 如果应用中使用了多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。 应用中不可在多个线程中共同使用一个FMDatabase对象操作数据库,这样会引起数据库数据混乱。 为了多线程操作数据库安全,FMDB使用了FMDatabaseQueue,使用FMDatabaseQueue很简单,首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。 在闭包中操作数据库,而不直接参与FMDatabase的管理。
1 FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:filepath]; 2 dispatch_queue_t myq1 = dispatch_queue_create("myqueue1", nil); 3 dispatch_async(myq1, ^{ 4 [queue inDatabase:^(FMDatabase *db) { 5 FMResultSet *RS = [db executeQuery:@"SELECT Title from data"];//NSString *address = [db stringForQuery:@
"SELECT Address FROM PersonList WHERE Name = ?"
,@"John”];
6 while ([RS next]) { 7 NSString *name = [RS stringForColumn:@"Title"]; 8 NSLog(@"%@",name); 9 } 10 11 }]; 12 });
10.关闭数据库
1 [db close];
11.另外 FMResultSet 还提供了很多方法来获得所需的格式的值:
FMResultSet *rs = [db executeQuery:sql, [NSNumber numberWithLong:mynum];
转载于:https://www.cnblogs.com/moxuexiaotong/p/4870438.html
sqlite第三方类库FMDB的使用相关推荐
- SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全
2019独角兽企业重金招聘Python工程师标准>>> (1)下载地址:https://github.com/ccgus/fmdb (2)注意点 --语句可以带分号":&q ...
- 添加第三方类库造成的linker command failed with exit code 1 (use -v to see invocation)的错误调试
linker command failed with exit code 1 (use -v to see invocation)这个错误貌似遇见并不止一次,当我想用某个第三方类库的时候(如SBJso ...
- iOS-数据持久化-第三方框架FMDB的使用
FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了 ...
- IOS启程01-配制CocoaPods来管理第三方类库
IOS启程 - 配制CocoaPods来管理第三方类库 Mac OSX 10.11 之后 1 CocoaPods CocoaPods应该是iOS最常用最有名的类库管理工具了,也就是说,在IOS开发过程 ...
- 程序开发常用第三方类库一览表(VendorLib)
以下是自己开发过程中用到的第三方类库,记录下来方便查阅 ------------------------------------------------------------------------ ...
- 在typescript中导入第三方类库import报错
问题 最近开始折腾typescript,在使用第三方类库,比如最常见的lodash,采用常规方法导入 import * as _ from 'lodash' vscode中报错提示lodash不是mo ...
- Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库
第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目 ...
- Android Studio导入第三方类库的方法
Android Studio导入第三方类库的方法 本人也刚刚开始尝试做android app的开发,听说android studio是Google支持的android 应用开发工具,所以想应该肯 ...
- Laravel 加载第三方类库的方法
https://www.jb51.net/article/138530.htm 这篇文章主要介绍了Laravel 加载第三方类库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编 ...
最新文章
- mybatis mysql 配置文件_Mybatis配置文件详解(4)
- 自定义searchview包括修改图标样式
- python的float精度_python 中的各种小数点后的精度处理方式
- 编程开发使用的软件大全
- 20155229《网络对抗技术》Exp9:Web安全基础
- 两万字整理Fabric(超级账本) 配置文件 掌握了它就掌握了Fabric的核心
- 二分法求函数方程根的matlab实现(内附例题和代码)
- 按键精灵手机mysql_mysql,按键精灵,读取写入
- python数据分析学什么意思_什么是python数据分析
- Java单例模式的双if
- VSCrawler 爬取美女图片
- Sql server 双机热备份数据库
- 怎么防治计算机病毒,计算机病毒怎么防治
- 网络安全常用的主流数据库(DBMS)✍
- Mongodb 分片、配置分片、选择片键、分片管理
- ruby on rails_如何将刺激添加到Ruby on Rails应用程序
- Linux 中的内存管理单元MMU
- 使用ssh正向连接、反向连接、做socks代理的方法
- 手把手安排 --- JavaH5微信支付(移动端浏览器H5拉起微信支付)
- Android gridview keep item selected