我们往数据库插入一条数据的过程:开始新事物->插入数据->提交事务
如果我们要插入1000条数据就要把上面的步骤重复执行1000次,FMDB在iOS中算是插入数据比较快的了,但如果数目稍微大些就会产生等待,对于用户体验不好,而事务的使用可以大大缩短插入时间。
FMDB使用事务操作和不使用事务操作插入数据使用的时间差距很大,具体例子如下
BOOL isSuccess = NO;
[self openDataBase];
if ([self.DB open]) {
[self.DB beginTransaction];
BOOL isRollBack = NO;
@try {
for (int i = 0; i < dataArray.count; i++) {
LiveMemberModel *model = dataArray[i];
NSMutableDictionary *parameter= [NSDictionary dictionaryWithModel:model];
NSArray *parameterDicKeyArray = [parameter allKeys];
NSMutableString *str1 = [[NSMutableString alloc]init];
for(NSString *key in parameterDicKeyArray)
[str1 appendFormat:@"'%@', ", key];
[str1 replaceOccurrencesOfString:@", " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(str1.length-2, 2)];
NSMutableString *str2 = [[NSMutableString alloc]init];
for (NSString *key in parameterDicKeyArray) {
[str2 appendFormat:@"'%@', ", parameter[key]];
}
[str2 replaceOccurrencesOfString:@", " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(str2.length-2, 2)];
NSString *insertStr = [NSString stringWithFormat:@"insert into '%@'(%@) values(%@)",tableName, str1, str2];
isSuccess = [self.DB executeUpdate:insertStr];
DebugLog(@"%@", isSuccess ? @"批量插入成功" : @"批量插入失败");
}
} @catch (NSException *exception) {
isRollBack = YES;
[self.DB rollback];
} @finally {
if (!isRollBack) {
[self.DB commit];
}
}
}
[self.DB close];
if(isSuccess)
return 1;
else
return 0;