FMDB 2.0 で、作成者がスレッド用に FMDatabaseQueue を追加したことがわかります。例は次のとおりです。
// First, make your queue.
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];
Then use it like so:
[queue inDatabase:^(FMDatabase *db) {
[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]];
FMResultSet *rs = [db executeQuery:@"select * from foo"];
while ([rs next]) {
…
}
}];
// An easy way to wrap things up in a transaction can be done like this:
[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]];
}];
2 つの質問です。databaseQueueWithPath パラメーターは何を指定する必要がありますか? それは私のデータベースがある場所のパスですか?
2 番目の質問です。複数の更新プログラムがあり、それらが互いに踏みにじられたくない場合に、これがどのように機能するかがわかります。しかし、データベースにデータを挿入しているが、データベース内の他のデータにもアクセスして、データの挿入中にユーザーがアプリを操作できるようにしたい場合はどうでしょう。それは可能ですか?ありがとう!