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 还提供了很多方法来获得所需的格式的值:

intForColumn:
longForColumn:
longLongIntForColumn:
boolForColumn:
doubleForColumn:
stringForColumn:
dataForColumn:
dataNoCopyForColumn:
UTF8StringForColumnIndex:
objectForColumn:
12.fmda在存储的过程中,传给execute方法的参数必须是NSObject,如果是int,float等需要先将数据进行包装,否则传过去的数据要么为null要么导致程序crash。正确的写法应该是:

FMResultSet *rs = [db executeQuery:sql, [NSNumber numberWithLong:mynum];

转载于:https://www.cnblogs.com/moxuexiaotong/p/4870438.html

sqlite第三方类库FMDB的使用相关推荐

  1. SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全

    2019独角兽企业重金招聘Python工程师标准>>> (1)下载地址:https://github.com/ccgus/fmdb (2)注意点 --语句可以带分号":&q ...

  2. 添加第三方类库造成的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 ...

  3. iOS-数据持久化-第三方框架FMDB的使用

    FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了 ...

  4. IOS启程01-配制CocoaPods来管理第三方类库

    IOS启程 - 配制CocoaPods来管理第三方类库 Mac OSX 10.11 之后 1 CocoaPods CocoaPods应该是iOS最常用最有名的类库管理工具了,也就是说,在IOS开发过程 ...

  5. 程序开发常用第三方类库一览表(VendorLib)

    以下是自己开发过程中用到的第三方类库,记录下来方便查阅 ------------------------------------------------------------------------ ...

  6. 在typescript中导入第三方类库import报错

    问题 最近开始折腾typescript,在使用第三方类库,比如最常见的lodash,采用常规方法导入 import * as _ from 'lodash' vscode中报错提示lodash不是mo ...

  7. Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库

    第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目 ...

  8. Android Studio导入第三方类库的方法

     Android Studio导入第三方类库的方法 本人也刚刚开始尝试做android app的开发,听说android studio是Google支持的android 应用开发工具,所以想应该肯 ...

  9. Laravel 加载第三方类库的方法

    https://www.jb51.net/article/138530.htm 这篇文章主要介绍了Laravel 加载第三方类库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编 ...

最新文章

  1. mybatis mysql 配置文件_Mybatis配置文件详解(4)
  2. 自定义searchview包括修改图标样式
  3. python的float精度_python 中的各种小数点后的精度处理方式
  4. 编程开发使用的软件大全
  5. 20155229《网络对抗技术》Exp9:Web安全基础
  6. 两万字整理Fabric(超级账本) 配置文件 掌握了它就掌握了Fabric的核心
  7. 二分法求函数方程根的matlab实现(内附例题和代码)
  8. 按键精灵手机mysql_mysql,按键精灵,读取写入
  9. python数据分析学什么意思_什么是python数据分析
  10. Java单例模式的双if
  11. VSCrawler 爬取美女图片
  12. Sql server 双机热备份数据库
  13. 怎么防治计算机病毒,计算机病毒怎么防治
  14. 网络安全常用的主流数据库(DBMS)✍
  15. Mongodb 分片、配置分片、选择片键、分片管理
  16. ruby on rails_如何将刺激添加到Ruby on Rails应用程序
  17. Linux 中的内存管理单元MMU
  18. 使用ssh正向连接、反向连接、做socks代理的方法
  19. 手把手安排 --- JavaH5微信支付(移动端浏览器H5拉起微信支付)
  20. Android gridview keep item selected

热门文章

  1. 驱动硬件Framebuffer驱动程序框架 skeletonfb.c 分析
  2. 改变QTableWidget 行高
  3. 优化算法-共轭梯度法
  4. 【数据挖掘笔记十三】数据挖掘的发展趋势和研究前沿
  5. Leetcode 344. 反转字符串 解题思路及C++实现
  6. eureka的自我保护
  7. 计算机组成原理——程序查询方式、程序中断方式
  8. 计算机组成原理——概述3
  9. STM32 BOOT0连接不当造成死机
  10. CTFshow php特性 web132