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

时间:2015-01-08 19:28:49

标签: ios sqlite background-process 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
    });

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)



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;  
               }  
           }  
             
       }];  
   });  
&#13;
&#13;
&#13;