簡體   English   中英

保持FMDB線程安全

[英]Keeping FMDB thread safe

我在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]];
}];

兩個問題,應該是databaseQueueWithPath參數是什么? 這是我的數據庫所在的路徑嗎?

第二個問題,我可以看到如果你有多個更新,並且你不希望它們相互擠壓,這將如何工作。 但是,如果要將數據插入數據庫,還想訪問數據庫中的其他數據,那么用戶仍然可以在插入數據時使用您的應用程序。 那可能嗎? 謝謝!

是的,databaseQueueWithPath:獲取數據庫的路徑。

對於你的第二個問題,如果你在后台線程中插入你的數據並且你可以將它分解成塊(所以在[queue inDatabase:]中花費的時間不長),那么是的,你仍然可以玩這個應用程序正在進行中。 當一個已經在使用時,您將無法使用各種隊列方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM