美文网首页关于iOS 那点事FMDBiOS多线程
FMDB 修改FMdatabase.m文件,不使用FMData

FMDB 修改FMdatabase.m文件,不使用FMData

作者: Lonely__M | 来源:发表于2015-11-19 15:10 被阅读443次

    众所周知,要使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回调方式,代码简洁又易懂。

    相关文章

      网友评论

        本文标题:FMDB 修改FMdatabase.m文件,不使用FMData

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