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回調方式,代碼簡潔又易懂。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容