美文网首页
FMDatabaseQueue

FMDatabaseQueue

作者: 可爱的活火山 | 来源:发表于2019-04-18 13:03 被阅读0次

    首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。 在闭包中操作数据库,而不直接参与FMDatabase的管理。

    FMDatabaseQueue解决这个问题的思路是:创建一个队列,然后将放入队列的block顺序执行,这样避免了多线程同时访问数据库;

    如果是多线程各创建FMDatabaseQueue的实例,其实有多个队列,还是存在数据库竞争的问题,和用FMDatabase时是一样的;

    让每个线程使用同一个Queue实例,问题就解决了!

    @property (nonatomic, strong) FMDatabaseQueue *commonQueue;
    
    NSString *commonQueuePath = [NSFileManager pathDBCommon];
    
    self.commonQueue = [FMDatabaseQueue databaseQueueWithPath:commonQueuePath];
    

    重点是这个!!!

    - (void)excuteQuerySQL:(NSString*)sqlStr resultBlock:(void(^)(FMResultSet * rsSet))resultBlock
    
    {
    
          if (self.dbQueue) {
    
             [_dbQueue inDatabase:^(FMDatabase *db) {
    
             FMResultSet * retSet = [db executeQuery:sqlStr];
    
             if (resultBlock) {
    
                 resultBlock(retSet);
    
             }
    
          }];
    
       }
    

    相关文章

      网友评论

          本文标题:FMDatabaseQueue

          本文链接:https://www.haomeiwen.com/subject/xlwzwqtx.html