iOS 开发之FMDB的使用指南
iOS中原生的SQLite API在使用时,非常的不方便。于是,就出现了系列将SQLite API进行封装的库。例如:FMDB、PlausibleDatabase等。 FMDB的github地址:https://github.com/ccgus/fmdb(一)、 什么是FMDB? 1、FMDB是以iOS平台的SQLite数据库框架。 2、FMDB以OC的方式封
iOS中原生的SQLite API在使用时,非常的不方便。于是,就出现了系列将SQLite API进行封装的库。例如:FMDB、PlausibleDatabase等。
FMDB的github地址:https://github.com/ccgus/fmdb
(一)、 什么是FMDB?
1、FMDB是以iOS平台的SQLite数据库框架。
2、FMDB以OC的方式封装了SQLite的C语言API。
3、FMDB是一款简洁、易用的封装库,在使用的时候,依赖Libsqlite3.dylib依赖包。
(二)、FMDB的优点
1、使用起来更加面向对象,省去了很多麻烦、多余的C语言的代码。
2、对比苹果自带的Core Data框架,更加轻量级和灵活。
3、提供了多线程安全的数据库操作方法,能有效的防止数据混乱。
4、FMDB同时兼容ARC和非ARC工程中,会自动根据工程配置来调整相关的内存管理代码。
(四)、FMDB的三个主要使用的类
1、FMDatabase :一个单一的SQLite数据库,用来执行SQL语句。
一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句。
2、FMResultSet :执行查询后的结果集
这个和Android的Cursor类似。
3、FMDatabaseQueue :用于在多线程中执行多个查询或更新,它是线程安全的。
(五)、FMDatabase对数据库的操作
1、创表 :通过指定SQLite数据库文件路径来创建FMDatabase对象
文件的路径有三种情况:
具体文件路径 :如果不存在会自动创建
空字符串 :会在临时目录创建一个空的数据库,会在FMDatabase连接关闭时,数据库文件也被删除。
nil :会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库也会被销毁。
2、更新 : 在FMDB中,除了查询以外的所有操作,都称为“更新”
create、drop、insert、update、delete等.
使用executeUpdate:方法执行更新
- (BOOL)executeUpdate:(NSString*)sql, ...
- (BOOL)executeUpdateWithFormat:(NSString*)format,...
示例:[dbexecuteUpdate:@"UPDATE t_foo SET age = ? WHERE name = ?;",@20,@"Jack"]
3、查询 :
查询的方法:
- (FMResultSet *)executeQuery:(NSString*)sql, ...
示例:
// 1.查询数据
FMResultSet *rs = [self.dbexecuteQuery:@"select * from t_foo where age > ?;",@50];
// 2.遍历结果集
while (rs.next) {
int ID = [rs intForColumn:@"id"];
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
NSLog(@"%d %@ %d", ID, name, age);
}
(六)、FMDatabaseQueue的使用FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题。
为了保证线程的安全,FMDB提供方便快捷的FMDatabaseQueue类。
FMDatabaseQueue后台会建立序列化的GCD队列,并执行你传给的GCD队列的块。这就意味着你是从多线程同时调用方法,GCD也会按照
它接收块的顺序执行。
FMDatabaseQueue的创建:
插入数据:
[self.queueinDatabase:^(FMDatabase *db) {
for (int i =0; i<40; i++) {
NSString *name = [NSStringstringWithFormat:@"rose-%d",arc4random() %1000];
NSNumber *age = @(arc4random() % 100 + 1);
[db executeUpdate:@"insert into t_test (name, age) values (?, ?);", name, age];
}
}];
插入数据(使用事务):
[self.queueinTransaction:^(FMDatabase *db,BOOL*rollback) {
[db executeUpdate:@"INSERTINTO t_test(name)VALUES (?)",@"Jack"];
[db executeUpdate:@“INSERTINTO t_test(name)VALUES (?)",@"Rose"];
[db executeUpdate:@"INSERTINTO t_test(name)VALUES (?)",@"Jim"];
//查询
FMResultSet *rs = [db executeQuery:@"select* from t_test"];
while ([rs next]) {
// …
}
//事务回滚
*rollback = YES;
}];
更新数据(使用事务):
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)