批处理
public static void main(String[] args)throws Exception {
String sql ="insert into dept(deptno,dname,loc) values(?,?,?)";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode", "root", "123");
PreparedStatement ps = con.prepareStatement(sql);
for(int i=1000;i<3000;i++){
ps.setInt(1, i);
ps.setString(2, "dept_"+i);
ps.setString(3, "上海");
ps.addBatch();//将sql命令作为子弹压入弹夹(batch)
}
ps.executeBatch();//ps一次性将弹夹中2000条sql命令推送到mysql服务器上
if(ps!=null){
ps.close();
}
if(con!=null){
con.close();
}
}
回滚
回滚操作一定要是innodb引擎,因为数据库引擎只有innodb支持事务
/*
* 业务:裁撤部门20以及部门20下所有的职员
* 分支任务:
* 删除部门20下所有的职员
* delete from emp where deptno=20;
* 删除部门20
* delete from dept where deptno=20;
*
*/
public static void main(String[] args)throws Exception {
String sql_1="delete from emp where deptno=20";
String sql_2="delete from dept where deptno=20";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode", "root", "123");
//通过当前[通道]向mysql服务器发送一个指令【start transaction】
con.setAutoCommit(false);
PreparedStatement ps = con.prepareStatement("");
ps.addBatch(sql_1);
ps.addBatch(sql_2);
try {
ps.executeBatch();
//程序走到39行时,说明executeBatch没有抛出SQLException.说明推送两条sql命令都没有问题
con.commit(); 向mysql服务器发送 commit指令
} catch (SQLException e) {
e.printStackTrace();
//说明这组业务中至少有一条sql命令不能正常执行的,此时应该将业务中所有的sql命令才生结果进行撤销
con.rollback();//向mysql服务器发送 rollback指令
}finally {
if(ps!=null){
ps.close();
}
if(con!=null){
con.close();
}
}
}