老师为什么我tc1()用了批处理的执行出来反而比不用批处理的tc2()慢了
package com.imooc.jdbc.sample; import com.imooc.jdbc.common.DbUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; public class BatchSample { public static void tc1(){ //批量添加1000名员工 Connection conn = null; PreparedStatement pstmt = null; try { long startTime = new Date().getTime(); conn = DbUtils.getConnection(); String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)"; pstmt = conn.prepareStatement(sql); for(int i=10000;i<20000;i++){ conn.setAutoCommit(false); //若不使用手动提交事务模式,遇到事故时,会出现事情做一半的情况 // if(i==1005){ // throw new RuntimeException("插入失败"); // } pstmt.setInt(1,i); pstmt.setNString(2,"员工"+i); pstmt.setFloat(3,4000f); pstmt.setNString(4,"市场部"); pstmt.addBatch();//将参数加入批处理 // pstmt.executeUpdate(); } pstmt.executeBatch(); conn.commit();//提交数据 long endTime = new Date().getTime(); System.out.println("tc1执行时长为"+(endTime-startTime)); } catch (Exception e) { e.printStackTrace(); try { if(conn != null && !conn.isClosed()){ conn.rollback();//回滚数据 } } catch (SQLException ex) { throw new RuntimeException(ex); } } finally{ DbUtils.closeConnection(null,pstmt,conn); } } public static void tc2(){ //批量添加1000名员工 Connection conn = null; PreparedStatement pstmt = null; try { conn = DbUtils.getConnection(); long startTime = new Date().getTime(); String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)"; for(int i=20000;i<30000;i++){ conn.setAutoCommit(false); //若不使用手动提交事务模式,遇到事故时,会出现事情做一半的情况 // if(i==1005){ // throw new RuntimeException("插入失败"); // } pstmt = conn.prepareStatement(sql); pstmt.setInt(1,i); pstmt.setNString(2,"员工"+i); pstmt.setFloat(3,4000f); pstmt.setNString(4,"市场部"); pstmt.executeUpdate(); } conn.commit();//提交数据 long endTime = new Date().getTime(); System.out.println("tc2执行时长为"+(endTime-startTime)); } catch (Exception e) { e.printStackTrace(); try { if(conn != null && !conn.isClosed()){ conn.rollback();//回滚数据 } } catch (SQLException ex) { throw new RuntimeException(ex); } } finally{ DbUtils.closeConnection(null,pstmt,conn); } } public static void main(String[] args) { tc1(); tc2(); } } 结果: tc1执行时长为1893 tc2执行时长为1740
5
收起
正在回答 回答被采纳积分+1
1回答
相似问题
登录后可查看更多问答,登录/注册
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星