一. FMDB简介
FMDB是对libsqlite3框架进行的封装,使用步骤与SQLite相似,并进行了多线程并发处理,所以线程是安全的.
FMDB是OC语言封装的,不能实现跨平台使用.
FMDB中关键的类:
FMDatabase:一个单独该类的对象,为一个数据库.
FMResultSet:使用SQL语句查询返回的结果集.
FMDatabaseQueue:用于多线程中执行多个查询或更新,线程是安全的.
二. FMDB创建数据库与表
使用FMDB创建Database的步骤:拼接一个数据库的地址,一般的存放在沙盒中的Documents文件夹下.
三. FMDB的增,删,查,改
#pragma mark -- 增,删,改 (非事务操作)
- (void)notTransction:(NSString *)sql {
// 任务队列
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[self sqlPath]];
// 将任务添加到队列中
[queue inDatabase:^(FMDatabase *db) {
BOOL isOK = [self.db executeUpdate:sql];
if (isOK) {
NSLog(@"操作成功!");
} else {
NSLog(@"操作失败!");
}
}];
}
#pragma mark -- 增,删,改 (非事务操作)
- (void)transition:(NSString *)sql {
// 任务队列
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[self sqlPath]];
// 将任务添加到队列中
[queue inDatabase:^(FMDatabase *db) {
// 开启事务
[db beginTransaction];
BOOL isOK = [self.db executeUpdate:sql];
if (isOK) {
NSLog(@"操作成功!");
} else {
NSLog(@"操作失败!");
}
// 提交事务
[db commit];
}];
}
事务的方式能加快操作数据库的允许速度.
查询操作
#pragma mark -- 查询
- (NSMutableArray *)selectMethod:(NSString *)sql {
// 打开数据库
[self openOrCreateSQLite];
// 查询返回结果集对象
FMResultSet *resultSet = [self.db executeQuery:sql];
// 遍历记录,将记录转为字典,存储在可变数组中.
NSMutableArray *array = [[NSMutableArray alloc] init];
while ([resultSet next]) {
// 将每一条记录转化成为字典
NSDictionary *dict = [resultSet resultDictionary];
[array addObject:dict];
}
// 释放返回结果集对象
[resultSet close];
// 关闭数据库
[self closeSQLite];
return array;
}
增删查改的sql语句可以运用?参数占位,绑定参数.
四. FMDB的多线程使用操作
使用FMDB的查询操作是在子线程中完成的,需要手动的将其放入到子线程中进行操作,推荐使用GCD的全局队列的方式在查询数据的时候放入到子线程中,获取完数据后,回到主线程,进行对UI的刷新操作.