-
為什么要使用FMDatabaseQueue
- FMDatabase這個類, 他不是線程安全的, 如果在多個線程中同時使用一個FMDataBase對象來存取數(shù)據(jù)的話, 有可能會發(fā)生數(shù)據(jù)錯亂
- 因此為了保證線程安全, 要使用FMDatabaseQueue這個類來操作數(shù)據(jù)
- FMDatabaseQueue這個類, 還提供了在一個SQL字符串中, 同時編寫多個代碼的方法, 因此使用起來十分的效率
-
簡單的代碼實現(xiàn)
#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; } // 懶加載數(shù)據(jù)庫隊列 - (FMDatabaseQueue *)queue { if (_queue == nil) { _queue = [FMDatabaseQueue databaseQueueWithPath:@"/Users/fanghe/Desktop/數(shù)據(jù)庫/demo.sqlite"]; } return _queue; } // 創(chuàng)建表 - (void)createTableWithSQL:(NSString *)sql { [self.queue inDatabase:^(FMDatabase *db) { BOOL result = [db executeUpdate:sql withArgumentsInArray:nil]; if (result) { NSLog(@"創(chuàng)建表格成功"); } else { NSLog(@"創(chuàng)建表格失敗"); } }]; } // 刪除表格 - (void)dropTableWithSQL:(NSString *)sql { [self.queue inDatabase:^(FMDatabase *db) { BOOL result = [db executeUpdate:sql withArgumentsInArray:nil]; if (result) { NSLog(@"刪除表格成功"); } else { NSLog(@"刪除表格失敗"); } }]; } // 插入數(shù)據(jù) - (void)insertDataWithSQL:(NSString *)sql { [self.queue inDatabase:^(FMDatabase *db) { BOOL result = [db executeUpdate:sql withArgumentsInArray:nil]; if (result) { NSLog(@"插入數(shù)據(jù)成功"); } else { NSLog(@"插入數(shù)據(jù)失敗"); } }]; } // 查詢所有數(shù)據(jù) - (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); } }]; } // 執(zhí)行多條語句 - (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(@"執(zhí)行多條語句成功"); } else { NSLog(@"執(zhí)行多條語句失敗"); } }]; } // 開啟事務(wù)執(zhí)行語句 - (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(@"執(zhí)行成功"); } else { [db rollback]; } }]; } @end
12. FMDatabaseQueue的簡單使用
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
推薦閱讀更多精彩內(nèi)容
- 一、FMDB基本使用 1、什么是FMDB? FMDB是一款簡潔、易用的封裝庫。因此,在這里推薦使用第三方框架FMD...
- 一,F(xiàn)MDB基本使用 1,什么是FMDB? FMDB是一款簡潔,易用的封裝庫。因此,在這里推薦使用第三方框架FMD...
- 概論 所謂的持久化,就是將數(shù)據(jù)保存到硬盤中,使得在應(yīng)用程序或機(jī)器重啟后可以繼續(xù)訪問之前保存的數(shù)據(jù)。在iOS開發(fā)中,...
- 1 FMDB簡介 1.1 使用方法 首先到這裡下載FMDB的source code,接著在解開的檔案裡,把src資...
- 作者:@翁呀偉呀 授權(quán)本站轉(zhuǎn)載 概論 所謂的持久化,就是將數(shù)據(jù)保存到硬盤中,使得在應(yīng)用程序或機(jī)器重啟后可以繼續(xù)訪問...