FMDB 修改FMdatabase.m文件,不使用FMDatabaseQueue支持多线程数据库操作

众所周知,要使FMDB支持多线程操作,需要使用FMDatabaseQueue,
觉得FMDatabaseQueue这种block回调方式使用不方便的可以用以下方式实现数据库单连接支持多线程操作:

  • 修改FMDatabase.m文件 open 方法

- (BOOL)open {
    if (_db) {
        return YES;
    }
    
/** 添加以下两句*/
     /** add by xxx at 20151119 begin*/
    sqlite3_shutdown();
    
    sqlite3_config(SQLITE_CONFIG_SERIALIZED);
    
    /** add by xxx at 20151119 end*/
    
    int err = sqlite3_open([self sqlitePath], &_db );
    if(err != SQLITE_OK) {
        NSLog(@"error opening!: %d", err);
        return NO;
    }
    
    if (_maxBusyRetryTimeInterval > 0.0) {
        // set the handler
        [self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval];
    }
    
    
    return YES;
}
  • 注释 FMDatabase.m文件 中出现if (_isExecutingStatement)的地方,总共有4

- (sqlite_int64)lastInsertRowId {
    
//    if (_isExecutingStatement) {
//        [self warnInUse];
//        return NO;
//    }
    
    _isExecutingStatement = YES;
    
    sqlite_int64 ret = sqlite3_last_insert_rowid(_db);
    
    _isExecutingStatement = NO;
    
    return ret;
}

- (int)changes {
//    if (_isExecutingStatement) {
//        [self warnInUse];
//        return 0;
//    }
    
    _isExecutingStatement = YES;
    
    int ret = sqlite3_changes(_db);
    
    _isExecutingStatement = NO;
    
    return ret;
}

....

现在可以直接使用FMdatabase进行多线程操作了,不必使用FMDatabaseQueue这种block回调方式,代码简洁又易懂。

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

推荐阅读更多精彩内容