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]];
}];
参考資料: