SQLite3的面向对象封装FMDB
来源:互联网 发布:淘宝市场行情标准版 编辑:程序博客网 时间:2024/06/11 14:04
FMDB简介
什么是FMDB?
FMDB是iOS平台的SQLite数据库框架
FMDB以OC是以OC的方式封装了SQLite的C语言API
FMDB的优点?
使用起来更加面向对象,省去了很多麻烦、冗余代码
对比苹果自带的CoreData框架,更加轻量级和灵活
提供了多线程安全的数据库操作方法,有效地方志数据混乱。
FMDB的github托管地址:https://github.com/ccgus/fmdb
FMDatabase对象
FMDatabase对象:代表一个独立的SQLite数据库
数据库的打开/创建:
FMDatabase *db = [FMDatabase databaseWithPath:path];if(![dbopen]){NSLog(@"数据库打开失败!");}
文件路径的三种情况说明:
a.具体的文件名:如果不存在会创建
b.空字符串@”“:临时目录创建一个空的,当FMDatabase连接关闭时删除
c.会在内存中创建一个临时数据库,当FMDatabase连接关闭时删除
数据库关闭
-(BOOL)close
FMDatabaseQueue对象
FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,可能会造成数据混乱的问题。
为了保证线程安全,FMDB提供了方便快捷的FMDatabaseQueue类。
FMDatabaseQueue对象的创建:
+ (instanceType)databaseQueueWithPath:(NSString *)aPath
FMDatabase对象封装在其中,并且创建的同时打开。
关闭:
-(void)close
简单来说,FMDatabaseQueue将FMDatabase进行了封装,推荐使用FMDatabaseQueue
如:
- (void)setupFMDB { NSSting *path = [NSString stringWithFormat:@"%@/Docunments/h.sqlite", NSHomeDirectory()]; self.queue = [FMDatabaseQueue databaseQueueWithPath:path];}
FMDatabaseQueue并不是FMDatabase,并没有直接执行SQL语句的方法
使用inDatabase方法通过block的方式,将执行SQL语句的代码传入
- (void)inDatabase:(void(^)(FMDatabase *db))block
block的参数db即封装在FMDatabaseQueue内部的FMDatabase对象
FMDatabase 执行更新语句
在FMDB中,除查询外的所有操作,都是”更新”,如:create drop insert delete update
使用
executeUpdate:方法执行更新
,该方法传递一个SQL语句字符串,并可以指定格式参数
-(BOOL)executeUpdate:(NSString*)sql,…
-(BOOL)executeUpdate:(NSString*)sqlwithArgumentsInArray:(NSArray*)arguments
-(BOOL)executeUpdate:(NSString*)sqlwithErrorAndBindings:(NSError**)outErr,…
-(BOOL)executeUpdate:(NSString*)sqlwithParameterDictionary:(NSDictionary*)arguments
-(BOOL)executeUpate:(NSString*)sqlwithVAList:(va_list)args,…
-(BOOL)executeUpdateWithFormat:(NSString*)format,…
这是一组函数,具有相同的功能,选择一个你习惯的调用方式
如:
-(void)updateDesc:(NSString*)desc forID:(NSString*)ID{[self.queueinDatabase:^(FMDatabase *db){if(![db excuteUpdate:@"update_heroset desc = ? wherein = ? ", desc, ID]){NSLog(@"%@", [dblastErrorMessage]);}}];}
执行查询语句
执行一个查询语句,使用方法
executeQuery:执行查询语句
,该方法传递一个查询SQL语句,并可以指定站位参数,返回一个查询的结果集对象
-(FMResultSet*)executeQuery:(NSString*)sql,…
-(FMResultSet*)executeQuery:(NSString*)sqlwithArgumentsInArray:(NSArray*)arguments
-(FMResultSet*)executeQuery:(NSString*)sqlwithParameterDictionary:(NSDictionary*)arguments
-(FMResultSet*)executeQueryWithFormat:(NSString*)format,…
-(FMResultSet*)executeQuery:(NSString*)sqlwithVAList:(va_list)args
FMResultSet对象是结果集对象,其内部是链表结构,通过next来便利每一行结果
既可以通过列的下标得字段值,也可以通过字段名获得字段值
如:
-(NSString*)getDescWithID:(NSString*)ID{ __blocK NSString *pret = nil;[self.queue inDatabase:^(FMDatabase *db){FMResultSet *rs = [db executeQuery:@"selected desc from t_hero wherein = ?;", 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 excuteUpdate:@"insert into t_table(name)values(:)", @"Rose"]){*rollback = YES;}}];
- SQLite3的面向对象封装FMDB
- sqlite3 FMDB的使用
- 面向对象的封装
- 面向对象的封装
- fmdb的封装
- FMDB的简单封装
- FMDB的简单封装
- FMDB的二次封装
- 谈面向对象的封装
- 面向对象的Javascript:封装
- 面向对象的特性:封装
- Lua的面向对象封装
- 面向对象封装的特性
- js面向对象的封装
- 面向对象的特征 封装
- 面向对象的特征--封装
- SQLite3以及FMDB的简单实用
- FMDB-一个sqlite的封装
- 在Spark集群中,集群的节点个数、RDD分区个数、cpu内核个数三者与并行度的关系??
- 选择排序
- 实习第三天
- 浙江工业大学校赛 小M和天平
- 获得排序索引函数改进
- SQLite3的面向对象封装FMDB
- Handler深入解析(Looper,MessageQueue联系)
- 深度学习之CNN
- 浅析CPU中断技术
- [JVM]Java垃圾回收机制
- 用Python区分静态与动态网页
- Assert 和De-assert 意思
- 文件读写整理
- Android学习<AS进行APK签名>