首先,解释:
在oracel中批量插入时是不能用VALUS(值1,值2,值3,值4,。。。。)这种方式进行批量插入的,错误例子如下:
insert into
T_ZJJK_XIANGGANG(MAIL_NUM,CLCT_DATE,WEIGHT,CLCT_CITY,DEST_CD,DEST_PROV,DEST_CITY,AMOUNT)
VALUES
( #{map.MAILNUM},#{map.CLCTDATE},#{map.WEIGHT},#{map.CLCTCITY},#{map.DESTCD},#
{map.DESTPROV},#{map.DESTCITY},#{map.AMOUNT})
正确的方法为:利用oracel的嘘表进行批量插入的操作,例子如下:
insert into T_ZJJK_XIANGGANG(MAIL_NUM,CLCT_DATE,WEIGHT,CLCT_CITY,DEST_CD,DEST_PROV,DEST_CITY,AMOUNT)
select
#{map.MAILNUM},#{map.CLCTDATE},#{map.WEIGHT},#{map.CLCTCITY},#{map.DESTCD},#{map.DESTPROV},#{map.DESTCITY},#{map.AMOUNT}
from dual
但是需要注意的是:批量插入时不能一次插入太多条数据,会报错sql异常,所以需要分批插入,比如一次两千条的插:
//为了防止SQL语句超出长度出错,进行分批插入
List list = new ArrayList();
int i3 = 0;
if(list.size()==0) {
continue;
}
else if(list.size()<=2000){
// 这里进行数据库的插入操作
i3= inserdao.XiangGangInser(list);
}else{
int times = (int)Math.ceil(list.size()/2000.0 );
for(int ii=0; ii