5

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 番目の質問です。複数の更新プログラムがあり、それらが互いに踏みにじられたくない場合に、これがどのように機能するかがわかります。しかし、データベースにデータを挿入しているが、データベース内の他のデータにもアクセスして、データの挿入中にユーザーがアプリを操作できるようにしたい場合はどうでしょう。それは可能ですか?ありがとう!

4

1 に答える 1

2

はい、databaseQueueWithPath: はデータベースへのパスを取ります。

2 番目の質問については、データをバックグラウンド スレッドに挿入していて、それをチャンクに分割できる場合 ([queue inDatabase:] ins で費やされる時間はそれほど長くありません)、はい、まだ遊ぶことができますそれが起こっている間、アプリ。1 つが既に使用されている間は、さまざまなキュー メソッドを使用できません。

于 2012-07-23T23:20:38.723 に答える