[英]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.