executeBatch执行效率低(仅仅1W条数据)
public boolean insertCdkey(ArrayList List) throws SQLException{
conn = mc.sqlConnnect();
boolean result = false;
String sql = "insert into lotteryitems(cdkey,points,lotteryid,state,openid,username) value(?,?,?,?,?,?)";
int j = 0;
try{
conn.setAutoCommit(false);
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
System.out.println(System.currentTimeMillis() / 1000 + "--开始时间");
for (int i = 0; i
System.out.println(j);
ps.setString(1, List.get(i).getCdkey());
ps.setInt(2, List.get(i).getPoints());
ps.setInt(3, List.get(i).getLotteryid());
ps.setInt(4, List.get(i).getStatus());
ps.setString(5, List.get(i).getOpenid());
ps.setString(6, List.get(i).getUsername());
ps.addBatch();
if (i % 3000 == 0 && i != 0) {
long startTime = System.currentTimeMillis();
ps.executeBatch();
conn.commit();
ps.clearBatch();
System.out.println("executeBatch 执行使用了 :"+(System.currentTimeMillis() - startTime )/1000 + " 秒");
}
j++;
}
ps.executeBatch();
ps.close();
conn.commit();
result = true;
}catch(SQLException e){
e.printStackTrace();
conn.rollback();
log.error("插入excel数据失败");
}finally{
conn.setAutoCommit(true);
conn.close();
}
System.out.println(System.currentTimeMillis() / 1000 + "--结束时间");
return result;
}
------解决思路----------------------
应该没有这么慢的
------解决思路----------------------
试试把
conn.setAutoCommit(false);
for循环中的:
conn.commit();
ps.clearBatch();
去掉
------解决思路----------------------
给你提几个建议,试试看能不能有一些优化。、
1、list的循环不要使用get(i)的方式,使用iterator
2、将循环里面的判断修改成if ((j %1000 = 0 && j != 0)
------解决思路----------------------
!iter.hasNext()),1000条提交一次。
3、如果是Oracle的话,看看DBA能不能优化一下数据库的内存分配。