nFMDB
 
nFMDB
n什么是FMDB
pFMDB是iOS平台的SQLite数据库框架
pFMDB以OC的方式封装了SQLite的C语言API
p
nFMDB的优点
p使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
p对比苹果自带的Core Data框架,更加轻量级和灵活
p提供了多线程安全的数据库操作方法,有效地防止数据混乱
p
nFMDB的github地址
phttps://github.com/ccgus/fmdb
p
n核心类
nFMDB有三个主要的类
pFMDatabase
ü一个FMDatabase对象就代表一个单独的SQLite数据库
ü用来执行SQL语句
ü
pFMResultSet
ü使用FMDatabase执行查询后的结果集
ü
pFMDatabaseQueue
ü用于在多线程中执行多个查询或更新,它是线程安全的
n打开数据库
n通过指定SQLite数据库文件路径来创建FMDatabase对象

FMDatabase *db = [FMDatabase databaseWithPath:path];

if (![db open]) {

NSLog(@"数据库打开失败!");

}

n
n文件路径有三种情况
p具体文件路径
ü如果不存在会自动创建
ü
p空字符串@""
ü会在临时目录创建一个空的数据库
ü当FMDatabase连接关闭时,数据库文件也被删除
p
pnil
ü会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁
n执行更新
n在FMDB中,除查询以外的所有操作,都称为“更新”
pcreate、drop、insert、update、delete等
p
n使用executeUpdate:方法执行更新
p- (BOOL)executeUpdate:(NSString*)sql, ...
p- (BOOL)executeUpdateWithFormat:(NSString*)format, ...
p- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
p
n示例

[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

n执行查询
n查询方法
p- (FMResultSet *)executeQuery:(NSString*)sql, ...
p- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
p- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
p
n示例

// 查询数据

FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];

// 遍历结果集

while ([rs next]) {

NSString *name = [rs stringForColumn:@"name"];

int age = [rs intForColumn:@"age"];

double score = [rs doubleForColumn:@"score"];

}

nFMDatabaseQueue
nFMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题
n
n为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类
n
nFMDatabaseQueue的创建

FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];

nFMDatabaseQueue
n简单使用

[queue inDatabase:^(FMDatabase *db) {

[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];

[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Rose"];

[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jim"];

FMResultSet *rs = [db executeQuery:@"select * from t_student"];

while ([rs next]) {

// …

}

}];

nFMDatabaseQueue
n使用事务

[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {

[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];

[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Rose"];

[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jim"];

FMResultSet *rs = [db executeQuery:@"select * from t_student"];

while ([rs next]) {

// …

}

}];

n事务回滚

*rollback = YES;

n

最新文章

  1. 【Learning Python】【第三章】表、元组、字典和集合
  2. nginx相关的一些记录
  3. 如何去掉div滚动条
  4. Linux初学 - head,tail,grep,sed,yum,find
  5. C++调用C#dll类库中的方法(非显性COM)
  6. Burp Suite安装及详细使用教程-Intruder模块详解
  7. Ubuntu 12.04 Desktop配置XAMPP【转】
  8. thinkphp join 查询
  9. [转载]浅析Windows安全相关的一些概念
  10. HDU 1997 汉诺塔VII
  11. createObjectURL方法 实现本地图片预览
  12. automake,autoconf使用详解
  13. 测试部署环境用到的主要linux命令
  14. SqlServer转换为Mysql
  15. 动手写IL到Lua的翻译器——准备
  16. ●BZOJ 2119 股市的预测
  17. json字符串转json对象,json对象转换成java对象
  18. 安卓TV开发(三) 移动智能设备之实现主流TV电视盒子焦点可控UI
  19. spring中通过JNDI、DBCP、C3P0配置数据源
  20. Oracle ORDS的简单SQL配置模板

热门文章

  1. Linux 网卡驱动学习(九)(层二转发)
  2. bootstrap tab页
  3. Java Web学习总结(14)——JSP基础语法
  4. 使用Profiles分析SQL语句运行时间和消耗资源
  5. Spring Boot Freemarker特别篇之contextPath【从零开始学Spring Boot】(转)
  6. KDE Plasma 5.8 的 LTS 周期正好与其所采用的 Qt 5.6 的 LTS 周期一致
  7. Mybatis全面详解——上(学习总结)
  8. [RxJS] Multicast with a selector argument, as a sandbox
  9. mac系统创建.开头文件.htaccess
  10. object.create(null) 和 {}创建对象的区别