FMDBデータベーススレッドセキュリティ

1914 ワード

FMDatabaseこのクラスはスレッドが安全ではありません.複数のスレッドで1つのFMDatabaseインスタンスを同時に操作すると、データ混乱の問題が発生します.FMDatabaseQueueはスレッドが安全です.FMDatabaseQueueクラスの操作の多くはFMDatabaseと似ています.
1.作成
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];

2.一般使用
[queue inDatabase:^(FMDatabase*db) {
    //FMDatabase     
}];

3.取引使用
データベーストランザクション(略称:トランザクション)は、データベース管理システムの実行中の論理単位であり、限られたデータベース操作シーケンスから構成されています.完全に実行するか、ロールバックします.これは重要です.300個のデータを更新する操作を想像してみてください.半分が正しいか、半分が間違っているかを想像してみてください.私たちが望んでいるのは、すべて成功してから本当に修正することです.SQLiteトランザクションを使用する文
     SQL        SQL  ,          :
     SQL  ,"begin transaction;"
     SQL  ,"commit transaction;"//       
     SQL  ,"rollback transaction;"
FMDatabase類似の使用方法
[self.database beginTransaction]; 
[self.database commit]; 
[self.database rollback]; 
FMDatabaseQueueトランザクションの使用方法rollback最終的にYESにロールバックされ、非常に便利なパッケージ
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]];
        [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]];
        [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]];

        if (whoopsSomethingWrongHappened) {
            *rollback = YES;
            return;
        }
        // etc…
        [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]];
    }];

参考資料:
  • iOS学習ノート17-FMDBこんにちは!-
  • FMDatabaseQueue Class Reference
  • FMDBマルチスレッドセキュリティ問題
  • iOS開発でFMDB|唐巧のブログ
  • を使用
  • SQLite事務|菜鳥教程
  • FMDB|JEEK WONG
  • を使用