-
为什么要使用FMDatabaseQueue
- FMDatabase这个类, 他不是线程安全的, 如果在多个线程中同时使用一个FMDataBase对象来存取数据的话, 有可能会发生数据错乱
- 因此为了保证线程安全, 要使用FMDatabaseQueue这个类来操作数据
- FMDatabaseQueue这个类, 还提供了在一个SQL字符串中, 同时编写多个代码的方法, 因此使用起来十分的效率
-
简单的代码实现
#import "DataBaseTool.h" #import "FMDatabase.h" #import "FMDatabaseQueue.h" static DataBaseTool *_instance; @interface DataBaseTool () @property (nonatomic, strong) FMDatabaseQueue *queue; @end @implementation DataBaseTool + (instancetype)shareInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[self alloc] init]; }); return _instance; } // 懒加载数据库队列 - (FMDatabaseQueue *)queue { if (_queue == nil) { _queue = [FMDatabaseQueue databaseQueueWithPath:@"/Users/fanghe/Desktop/数据库/demo.sqlite"]; } return _queue; } // 创建表 - (void)createTableWithSQL:(NSString *)sql { [self.queue inDatabase:^(FMDatabase *db) { BOOL result = [db executeUpdate:sql withArgumentsInArray:nil]; if (result) { NSLog(@"创建表格成功"); } else { NSLog(@"创建表格失败"); } }]; } // 删除表格 - (void)dropTableWithSQL:(NSString *)sql { [self.queue inDatabase:^(FMDatabase *db) { BOOL result = [db executeUpdate:sql withArgumentsInArray:nil]; if (result) { NSLog(@"删除表格成功"); } else { NSLog(@"删除表格失败"); } }]; } // 插入数据 - (void)insertDataWithSQL:(NSString *)sql { [self.queue inDatabase:^(FMDatabase *db) { BOOL result = [db executeUpdate:sql withArgumentsInArray:nil]; if (result) { NSLog(@"插入数据成功"); } else { NSLog(@"插入数据失败"); } }]; } // 查询所有数据 - (void)queryAll { [self.queue inDatabase:^(FMDatabase *db) { NSString *sql = @"select * from T_human"; FMResultSet *resultSet = [db executeQuery:sql withArgumentsInArray:nil]; while (resultSet.next) { NSString *name = [resultSet stringForColumn:@"name"]; int age = [resultSet intForColumn:@"age"]; double height = [resultSet doubleForColumn:@"height"]; NSLog(@"%@, %i, %lf", name, age, height); } }]; } // 执行多条语句 - (void)excuteStaments { NSString *sql = @"insert into T_human(name, age, height) values('wangwu', 15, 170);insert into T_human(name, age, height) values('zhaoliu', 13, 160);"; [self.queue inDatabase:^(FMDatabase *db) { BOOL result = [db executeStatements:sql]; if (result) { NSLog(@"执行多条语句成功"); } else { NSLog(@"执行多条语句失败"); } }]; } // 开启事务执行语句 - (void)transaction { [self.queue inTransaction:^(FMDatabase *db, BOOL *rollback) { NSString *sql = @"insert into T_human(name, age, height) values('wangwu', 15, 170);insert into T_human(name, age, height) values('zhaoliu', 13, 160);"; NSString *sql2 = @"insert into T_human(name, age, height) values('zhaoliu', 13, 160);insert into T_human(name, age, height) values('wangwu', 15, 170);"; BOOL result1 = [db executeUpdate:sql withArgumentsInArray:nil]; BOOL result2 = [db executeUpdate:sql2 withArgumentsInArray:nil]; if (result1 && result2) { NSLog(@"执行成功"); } else { [db rollback]; } }]; } @end
12. FMDatabaseQueue的简单使用
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1 FMDB简介 1.1 使用方法 首先到这裡下载FMDB的source code,接著在解开的档案裡,把src资...
- 作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问...