Statement的execute()等方法一次只能执行一条SQL语句,如果同时有多条SQL语句要执行的话,可以使用addBatch()方法将要只系那个的SQL语句加入进来,然后执行executeBatch()方法,这样就在一次方法调用中执行了多条SQL语句,以提高执行效率。
为了保证这一批语句全部成功或者失败,应该把批处理放置在事务中进行:
try{
conn.setAutoCommite(false);//把自动提交事务设置为false
Statement stmt=conn.createStatement();
stmt.addBatch(“…”);//添加SQL语句
stmt.addBatch(“…”);//添加SQL语句
. . .
Stmt.executeBatch();//执行批处理
conn.commit();//提交事务
}catch(SQLException e){
try{
conn.rollback();//回滚事务
}catch(SQLExceptione1){
e 1.printStackTrace();
}
e.printStackTrace();
}finally{
Try{
Conn.setAutoCommit(true);//把自动提交事务设置为true
}catch(SQLExceptione){
e.printStackTrace();
}
//关闭资源
. . .
}
使用PreparedStatement也可以进行批处理:
try{
//启动事务------把自动提交事务设置为false
conn.setAutoCommit(false);
pstmt=conn.preparedStatement(sql);
pstmt.setXXX(1,…);//给占位符赋值
. . .
//把这些操作添加到批处理中
pstmt.addBatch();
pstmt.setXXX(1,…);//给占位符赋值
. . .
//把这些操作添加到批处理中
Pstmt.addBatch();
Pstmt.executeBatch();//执行批处理
//提交事务
Conn.commit();
}catch(SQLException e){
//回滚事务-------把所有的操作都取消
try{
conn.rollback();
}catch(SQLExceptione1){
e 1.printStackTrace();
}
e.printStackTrace();
}finally{
//关闭事务-----把自动提交事务设置为true
try{
conn.setAutCommit(true);
}catch(SQLExceptione){
e.printStrackTrace();
}
//关闭资源
. . .
}
批处理中执行的语句只能是更新语句(insert、delete、update),否则会抛出异常。