通常情况下,我们的同时执行多个语句时,如果利用statement进行一次一次的处理,需要编写多个stmt.executeUpdate(sql);语句。而我们利用批处理时,只需要将多个语句添加到批处理中,然后只需要执行一次stmt.executeBatch()即可。批处理对于PreparedStatement同样适用。
public class JdbcBatch {
public static void main(String[] args){
Connection conn =null;
Statement stmt = null;
java.sql.PreparedStatement ptmt =null;
try{
Class.forName("com.mysql.jdbc.Driver"); //建立驱动
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/studemo","root","root");//建立连接
stmt = conn.createStatement();//创建语句
/*
String sql="insert into stu values (20,'zhangsan','1234')";
String sql1="insert into stu values (21,'lisi','1234')";
stmt.executeUpdate(sql);//执行语句
stmt.executeUpdate(sql1);
//不利用批处理时,我们需要每次都进行执行sql语句
*/
/* stmt = conn.createStatement();
stmt.addBatch("insert into stu values (25,'zhangsan','1234')");
stmt.addBatch("insert into stu values (26,'zhangsan','1234')");
stmt.addBatch("insert into stu values (27,'zhangsan','1234')");
stmt.executeBatch();
//利用statement批处理,可以简化。但是如果含有参数则在字符串拼接的时候会比较麻烦
*/
ptmt = conn.prepareStatement("insert into stu values (?,?,?)");
ptmt.setInt(1, 35);
ptmt.setString(2, "lisi");
ptmt.setString(3, "1234");
ptmt.addBatch();
ptmt.setInt(1, 36);
ptmt.setString(2, "lisi");
ptmt.setString(3, "1234");
ptmt.addBatch();
ptmt.setInt(1, 37);
ptmt.setString(2, "lisi");
ptmt.setString(3, "1234");
ptmt.addBatch();
ptmt.executeBatch(); // 利用preparestatement 进行批处理
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(stmt!=null){stmt.close();stmt=null;}
if(ptmt!=null){ptmt.close();ptmt=null;}
if(conn!=null){conn.close();conn=null;}
}catch(SQLException e){
e.printStackTrace();
}
}
}
}