老师为什么我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执行时长为17406
收起
正在回答 回答被采纳积分+1
1回答
相似问题
登录后可查看更多问答,登录/注册
2023版Java工程师
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星