FMDatabaseQueue

首先用一个数据库文件地址来初使化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);

         }

      }];

   }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 为什么要使用FMDatabaseQueueFMDatabase这个类, 他不是线程安全的, 如果在多个线程中同时使...
    面糊阅读 7,280评论 0 54
  • 简述: FMDB是iOS广泛使用的数据库第三方框架。FMDB git地址 ,其基本使用方法在官方文档上有详细说明,...
    Lee_Jo阅读 9,549评论 2 7
  • 面向对象的三大特性:封装、继承、多态 OC内存管理 _strong 引用计数器来控制对象的生命周期。 _weak...
    运气不够技术凑阅读 1,135评论 0 10
  • 静静地过自己的生活,现在的我,不埋怨谁,不嘲笑谁,也不羡慕谁。阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。用心...
    快乐天成阅读 163评论 0 1