FMDB我们经常使用,是对 sqlite 的一个很好的封装.但是使用还是有点不太方便,索性就写了一个 manager 类管理,进行 crud 操作.我们知道这四个操作中当遇到大量数据时候,插入和更新操作是最耗时的,所以我们就要使用事务进行操作,到达节省时间的目的,根据经验再插入10W 条数据大概是2.6s, 是不是很6.那么我们就来看看吧.
.h
//// FMDBManager.h// FMDBManager//// Created by HMC on 2016/10/31.// Copyright © 2016年 HMC. All rights reserved.//#import <Foundation/Foundation.h>@interface FMDBManager : NSObject//需要使用事务-(BOOL)insert;-(BOOL)update;//arr 查询条件-(NSArray *)select:(NSArray *)arr;//arr 删除的条件-(void)delete:(NSArray *)arr;@end
.m 采用单例模式设置
//// FMDBManager.m// FMDBManager//// Created by HMC on 2016/10/31.// Copyright © 2016年 HMC. All rights reserved.//#import "FMDBManager.h"#import "FMDB.h"@interface FMDBManager()@property (strong, nonatomic) FMDatabaseQueue * fmdbQueue;@end@implementation FMDBManager-(instancetype)init{if ( self = [super init]) {//单例模式设计static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"user.db"]);_fmdbQueue = [FMDatabaseQueue databaseQueueWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"user.db"]];[_fmdbQueue inDatabase:^(FMDatabase *db) {if ([db executeUpdate:@"create table if not exists user (userid integer primary key autoincrement , username text)"]) {NSLog(@"create table success");}else{NSLog(@"create table error");}}];});}return self;}-(BOOL)insert{__block BOOL isSuccess = NO;NSString * sql = @"insert into user (username) values ('SJW')";[_fmdbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {@try {CFTimeInterval start= CFAbsoluteTimeGetCurrent();//for (int i= 0 ; i< 100000; i++) {[db executeUpdate:sql];//}NSLog(@"时间:%f",CFAbsoluteTimeGetCurrent()-start);} @catch (NSException *exception) {*rollback = YES;} @finally {*rollback = NO;isSuccess = YES;}}];return isSuccess;}-(BOOL)update{__block BOOL isSuccess = NO;NSString * sql = @"update user set username = 'SJW'";[_fmdbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {@try {[db executeUpdate:sql];} @catch (NSException *exception) {//失败了 就回滚数据*rollback = YES;} @finally {*rollback = NO;isSuccess = YES;}}];return isSuccess;}-(NSArray *)select:(NSArray *)arr{NSMutableArray * arrs = [NSMutableArray array];NSString * sql = @"select * from user where 1 = 1";if (arr) {for (NSString * str in arr) {[sql stringByAppendingString:[NSString stringWithFormat:@"and %@",str]];}}[_fmdbQueue inDatabase:^(FMDatabase *db) {FMResultSet *result = [db executeQuery:sql];while ([result next]) {NSString * username= [result stringForColumn:@"username"];NSLog(@"%@",username);[arrs addObject:username];}}];return arrs;}-(void)delete: (NSArray *) arr{NSString * sql = @"DELETE from user where 1 = 1 ";if (arr) {for (NSString * str in arr) {[sql stringByAppendingString:[NSString stringWithFormat:@"and %@",str]];}}[_fmdbQueue inDatabase:^(FMDatabase *db) {FMResultSet *result = [db executeQuery:sql];while ([result next]) {NSString * username= [result stringForColumn:@"username"];NSLog(@"%@",username);}}];}@end
调用
//// ViewController.m// FMDBManager//// Created by HMC on 2016/10/31.// Copyright © 2016年 HMC. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];FMDBManager * ma = [[FMDBManager alloc]init];[ma insert];[ma select:@[@"username = 'SJW'"]];// [ma update];[ma delete:@[@"username = 'songjinwei'"]];}@end
