JDBC批量处理

来源:互联网 发布:学吉他的软件 编辑:程序博客网 时间:2024/06/12 20:40

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),否则会抛出异常。