FMDB------2:マルチスレッド使用.

2092 ワード

      
#import 
  • 注意:viewDidLoadで参照する.
  • - (void)viewDidLoad {
        [super viewDidLoad];
        //     
        [self openDB];
        //     ,         
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            [self threadNotTransaction];
        });
    }
    
  • データベースファイル格納パス
  • - (NSString*)dbPath{
        NSString *dbPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        NSString *docPath = [dbPath stringByAppendingPathComponent:@"test.sqlite"];
        NSLog(@"%@",dbPath);
        return docPath;
    }
    
  • データベースを開き、テーブル
  • を作成します.
    - (void)openDB{
        FMDatabase *database = [FMDatabase databaseWithPath:[self dbPath]];
        /**
         *       ,         ,  .             
         */
        if([database open]){
            BOOL isSuccess = [database executeUpdate:@"create table if not exists stu (name text)"];
            if (isSuccess) {
                NSLog(@"    ");
            }else{
                NSLog(@"    ");
            }   
        }else{
            NSLog(@"       ");
        }   
    }
    
  • マルチスレッドがデータベースを操作する場合、非トランザクションの処理方法
  • - (void)threadNotTransaction{
        //        
        FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[self dbPath]];
        //            
        [queue inDatabase:^(FMDatabase *db) {
           
            [db beginTransaction];//                   .      .     ,        ,        .
            BOOL isError = NO;
            int temp = -1;
            for (int i = 0 ; i < 10000; i++) {
                isError = [db executeUpdate:@"insert into stu values (?)",@(i)];
                if (!isError) { //   isError == NO.     
                    if(temp == -1){
                        temp = i;
                    }
                }
            }
            if (isError) {
                NSLog(@"        ");
                
            }else{
                NSLog(@"        --%d",temp);
                
            }
            //    
            [db commit];//  :             ,       .
            
        }];
    }