ios - 使用 FMDB 在后台线程上执行数据库操作

ios - perform database actions on background thread with FMDB

我正在 iOS (obj-c) 项目中使用本地 SQLITE 数据库,我们选择使用 FMDB。请注意,我对更改为 Core Data 或从 FMDB 切换到其他库不感兴趣。

一切正常,但是当我们第一次运行应用程序时,数据从我们的服务器下载,json 被解析,然后分类到本地数据库中。由于传入的信息量很大,这需要 30 到 40 秒的时间。理想情况下,这将在后台完成,但 FMDB 不允许这样做(至少据我所知),因为它可能会导致数据库数据完整性问题。

有没有人成功使用 FMDB 库在后台线程上运行所有查询、插入等?我试过简单地将动作包装在:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // ... query/insert/update/delete
    });

...但我最终遇到了数据库完整性问题。任何提示或示例都会很棒。提前致谢。

@nawar - 抱歉没有早点发布。我最终在 dispatch_async 块中使用了 FMDatabaseQueue 的单个实例(而不是 FMDatabase)。奇迹般有效。我 运行 遇到的问题是由于使用 FMDatabase。

dispatch_async(dispatch_get_global_queue(0, 0), ^{  
       [self.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {  
           BOOL result = YES;  
           for (int i = 500; i < 1000; i++) {  
               result =  [db executeUpdate:@"insert into testTable (name) values(?)",[NSString stringWithFormat:@"name-%d",i]];  
               if (!result) {  
                   NSLog(@"break");  
                   *rollback = YES;  
                   break;  
               }  
           }  
             
       }];  
   });