12. FMDatabaseQueue的簡單使用

  1. 為什么要使用FMDatabaseQueue

    • FMDatabase這個類, 他不是線程安全的, 如果在多個線程中同時使用一個FMDataBase對象來存取數(shù)據(jù)的話, 有可能會發(fā)生數(shù)據(jù)錯亂
    • 因此為了保證線程安全, 要使用FMDatabaseQueue這個類來操作數(shù)據(jù)
    • FMDatabaseQueue這個類, 還提供了在一個SQL字符串中, 同時編寫多個代碼的方法, 因此使用起來十分的效率
  2. 簡單的代碼實現(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容