gpt4 book ai didi

iphone - 保持 FMDB 线程安全

转载 作者:行者123 更新时间:2023-12-03 19:00:09 36 4
gpt4 key购买 nike

我看到在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:采用数据库的路径。

对于你的第二个问题,如果你在后台线程中插入数据并且可以将其分成 block (因此 [queue inDatabase:] 花费的时间不会很长),那么是的,你可以在此过程中仍然可以使用该应用程序。当一种队列方法已在使用中时,您将无法使用各种队列方法。

关于iphone - 保持 FMDB 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619343/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com