之前本菜鸡一直操作数据库都是直接fmdb语句就开始搞起来,今天遇到一个问题,数据过多(1k+)的写入时间会很久,然后本菜鸡又学会了一种 对数据库进行事物操作。之前每次executeUpdate都是一次事务操作,过程是:开始新事务-->插入数据-->提交事务。我们向数据库中插入多少条数据,这个过程就会执行多少次,当数据量变大的时候时间就会变得超级长。所以要先把所有的操作放在缓存里面,然后把整个缓存提交,进行一次事物操作,时间就会大大缩短。
代码如下:
//NSLog(@"**********开始事务操作*************");
[_fsXLdb shouldCacheStatements]; // 开启缓存
[_fsXLdb beginTransaction]; // 事务操作
BOOL isRollBack =NO;
@try{
for(FSZDModel*modelindbMA) {
BOOL flag = [_fsXLdb executeUpdate:@"insert into FUSHAN_STATION (STATION_ID,XL,XLMC ,ZD ,ZDNAME ,SXX ,JD ,WD,LAT,LON) values(?,?,?,?,?,?,?,?,?,?)",model.STATION_ID,model.XL,model.XLMC,@(model.ZD),model.ZDNAME,model.SXX,model.JD,model.WD,[NSString stringWithFormat:@"%f",coor.latitude],[NSString stringWithFormat:@"%f",coor.longitude]];
// if (flag) {
// NSLog(@"插入成功");
// }else{
// NSLog(@"插入失败");
// }
}
}
@catch(NSException *exception) {
isRollBack =YES;
[_fsXLdbrollback];// 回滚
}
@finally{
if(!isRollBack) {
[_fsXLdbcommit];
}
}
网友评论