SQLite3的面向对象封装FMDB
2016-03-01 22:22
423 查看
FMDB简介
什么是FMDB?
FMDB是iOS平台的SQLite数据库框架
FMDB以OC的方式封装了SQLite的C语言API
FMDB的优点?
使用起来更加面向对象,省去了很多麻烦、冗余的代码
对比苹果自带的CoreData框架,更加轻量级和灵活
提供了多线程安全的数据库操作方法,有效地方志数据混乱。
FMDB的github托管地址:https://github.com/ccgus/fmdb
FMDatabase对象
FMDatebase对象:代表一个独立的SQLite数据库
数据库的打开/创建:
a. 具体的文件名:如果不存在会创建
b. 空字符串@”” :临时目录创建一个空的,当FMDatabase连接关闭时删除
c. 会在内存中创建一个临时数据库,当FMDatabase连接关闭时删除
数据库关闭
FMDatabaseQueue对象
FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,可能会造成数据混乱的问题。 为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类。
FMDatabaseQueue对象的创建 :
FMDatabaseQueue并不是FMDatabase,并没有直接执行SQL语句的方法 使用 inDatabase方法通过block的方式,将执行SQL语句的代码传入
FMDatabase执行更新语句
在FMDB中,除查询外的所有操作,都是“更新” ,如:create drop insert delete update
使用executeUpdate:方法执行更新 ,该方法传递一个SQL语句字符串,并可以指定格式参数
如:
执行查询语句
执行一个查询语句,使用方法 execteQuery: ,该方法传递一个查询SQL语句,并可以指定占位参数,返回一个查询的结果集对象
既可以通过列的下标过得字段值,也可以通过字段名获得字段值
如:
事务处理
什么是事务?
也称工作单元,是一个或多个SQL语句组成的序列,作为一个完整的工作单元
如:A到银行为B转账1000元
操作1:A账户 - 1000
操作2:B账户 + 1000
两个操作放在一起构成一个完成的工作单元。
为什么要进行事务处理?
如果操作1成功,但操作2失败了,则会出现***烦
将两个操作放在一个事务中进行处理,保证同时成功或同时失败
事务的sql语句:
开始事务begin transaction
提交事务commit transaction
回滚事务rollback transaction
FMDB的事务处理,如:
什么是FMDB?
FMDB是iOS平台的SQLite数据库框架
FMDB以OC的方式封装了SQLite的C语言API
FMDB的优点?
使用起来更加面向对象,省去了很多麻烦、冗余的代码
对比苹果自带的CoreData框架,更加轻量级和灵活
提供了多线程安全的数据库操作方法,有效地方志数据混乱。
FMDB的github托管地址:https://github.com/ccgus/fmdb
FMDatabase对象
FMDatebase对象:代表一个独立的SQLite数据库
数据库的打开/创建:
FMDatebase *db = [FMDatabase databaseWithPath:path]; if ( ![db open] ) { NSLog(@"数据库打开失败!"); }文件路径的三种情况说明:
a. 具体的文件名:如果不存在会创建
b. 空字符串@”” :临时目录创建一个空的,当FMDatabase连接关闭时删除
c. 会在内存中创建一个临时数据库,当FMDatabase连接关闭时删除
数据库关闭
- (BOOL)close
FMDatabaseQueue对象
FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,可能会造成数据混乱的问题。 为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类。
FMDatabaseQueue对象的创建 :
+ (instancetype)databaseQueueWithPath:(NSString *)aPathFMDatabase对象封装在其中,并且创建的同时打开。关闭:
- (void)close简单来说,FMDatabaseQueue将FMDatabase进行了封装,推荐使用FMDatabaseQueue 如:
- (void) setupFMDB { NSString * path = [NSString stringWithFormat:@"%@/Documents/h.sqlite", NSHomeDirectory()]; self.queue = [FMDatabaseQueue databaseQueueWithPath:path]; }
FMDatabaseQueue并不是FMDatabase,并没有直接执行SQL语句的方法 使用 inDatabase方法通过block的方式,将执行SQL语句的代码传入
- (void)inDatabase:(void ( ^ ) ( FMDatabase *db ))blockblock的参数db即封装在FMDatabaseQueue内部的FMDatabase对象
FMDatabase执行更新语句
在FMDB中,除查询外的所有操作,都是“更新” ,如:create drop insert delete update
使用executeUpdate:方法执行更新 ,该方法传递一个SQL语句字符串,并可以指定格式参数
- (BOOL)executeUpdate:(NSString *)sql, ... - (BOOL)executeUpdate:(NSString *)sql withArgumentsInArray:(NSArray *)arguments - (BOOL)executeUpdate:(NSString *)sql withErrorAndBindings:(NSError **)outErr, ... - (BOOL)executeUpdate:(NSString *)sql withParameterDictionary:(NSDictionary *)arguments - (BOOL)executeUpdate:(NSString *)sql withVAList:(va_list)args - (BOOL)executeUpdateWithFormat:(NSString *)format, ...这是一族函数,具有相同的功能,选择一个你习惯的调用方式
如:
- (void) updateDesc:(NSString*) desc forID:(NSString*) ID { [self.queue inDatabase:^(FMDatabase *db) { if ( ![db executeUpdate:@"update t_hero set desc=? where id=?", desc, ID] ) { NSLog(@"%@", [db lastErrorMessage]); } }]; }
执行查询语句
执行一个查询语句,使用方法 execteQuery: ,该方法传递一个查询SQL语句,并可以指定占位参数,返回一个查询的结果集对象
- (FMResultSet *)executeQuery:(NSString *)sql, ... - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments - (FMResultSet *)executeQuery:(NSString *)sql withParameterDictionary:(NSDictionary *)arguments - (FMResultSet *)executeQueryWithFormat:(NSString *)format, ... - (FMResultSet *)executeQuery:(NSString *)sql withVAList:(va_list)argsFMResultSet对象是结果集对象,其内部是链表结构,通过next来遍历每一行结果
既可以通过列的下标过得字段值,也可以通过字段名获得字段值
如:
- (NSString*) getDescWithID:(NSString*) ID { __block NSString *pret = nil; [self.queue inDatabase:^(FMDatabase *db) { FMResultSet * rs = [db executeQuery:@"select desc from t_hero where id=?;", ID]; if ( [rs next] ) { pret = [rs stringForColumn:@"desc"]; } [rs close]; }]; return pret; }
事务处理
什么是事务?
也称工作单元,是一个或多个SQL语句组成的序列,作为一个完整的工作单元
如:A到银行为B转账1000元
操作1:A账户 - 1000
操作2:B账户 + 1000
两个操作放在一起构成一个完成的工作单元。
为什么要进行事务处理?
如果操作1成功,但操作2失败了,则会出现***烦
将两个操作放在一个事务中进行处理,保证同时成功或同时失败
事务的sql语句:
开始事务begin transaction
提交事务commit transaction
回滚事务rollback transaction
FMDB的事务处理,如:
[self.queue inTransaction:^(void *db, BOOL * rollback) { FMResultSet * rs = [db executeQuery:@"select * from t_hero;"]; while ( [rs next] ) { //... } if ( ![db executeUpdate:@"insert into t_table(name) values(:)", @"Rose"] ) { *rollback = YES; } }];
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- APP添加CNZZ统计插件教程 Android版添加phonegap
- Android APP与媒体存储服务的交互
- java实现收藏名言语句台词的app
- 修改Android App样式风格的方法
- Android App数据格式Json解析方法和常见问题
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略