眾所周知啤它,要使FMDB支持多線程操作,需要使用FMDatabaseQueue离赫,
覺得FMDatabaseQueue這種block回調方式使用不方便的可以用以下方式實現(xiàn)數(shù)據(jù)庫單連接支持多線程操作:
- 修改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文件 中出現(xiàn)
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;
}
....
現(xiàn)在可以直接使用FMdatabase進行多線程操作了蹬刷,不必使用FMDatabaseQueue這種block回調方式办成,代碼簡潔又易懂搂漠。