- PreparedStatement批量處理和事務代碼如下:
- /*
- * PreparedStatement:
- 1.addBatch() 將一組參數添加到 PreparedStatement對象內部
- 2.executeBatch() 將一批參數提交給數據庫來執行,如果全部命令執行成功,則返回更新計數組成的數組。
- *
- */
- public class PreparedStatementCommitAndRollback {
- public static void main(String args[]) {
- Connection con = null;
- PreparedStatement pstm = null;
- try {
- // 1. 建立與數據庫的連接
- con = JDBCUtil.getConnection();
- // 2. 執行sql語句
- // 1).先創建PreparedStatement語句(發送slq請求):
- pstm = con.prepareStatement("insert into student values(?,?,?,?)");
- con.setAutoCommit(false);//1,首先把Auto commit設置為false,不讓它自動提交
- // 2) 設置sql語句1
- pstm.setInt(1, 33);
- pstm.setString(2,"wangqin");
- pstm.setString(3, "c++");
- pstm.setDouble(4, 78.5);
- // 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。
- pstm.addBatch();
- // 2) 設置sql語句2
- pstm.setInt(1, 34);
- pstm.setString(2,"wuytun");
- pstm.setString(3, "c");
- pstm.setDouble(4, 77);
- // 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。
- pstm.addBatch();
- // 2) 設置sql語句3
- pstm.setInt(1, 31);
- pstm.setString(2,"tetet");
- pstm.setString(3, "c++");
- pstm.setDouble(4, 90);
- // 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。
- pstm.addBatch();
- // 2) 設置sql語句4
- pstm.setInt(1, 32);
- pstm.setString(2,"liug");
- pstm.setString(3, "c");
- pstm.setDouble(4, 50);
- // 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。
- pstm.addBatch();
- // 4) 將一批參數提交給數據庫來執行,如果全部命令執行成功,則返回更新計數組成的數組。
- pstm.executeBatch();
- System.out.println("插入成功!");
- // 若成功執行完所有的插入操作,則正常結束
- con.commit();//2,進行手動提交(commit)
- System.out.println("提交成功!");
- con.setAutoCommit(true);//3,提交完成后回復現場將Auto commit,還原為true,
- } catch (SQLException e) {
- try {
- // 若出現異常,對數據庫中所有已完成的操作全部撤銷,則回滾到事務開始狀態
- if(!con.isClosed()){
- con.rollback();//4,當異常發生執行catch中SQLException時,記得要rollback(回滾);
- System.out.println("插入失敗,回滾!");
- con.setAutoCommit(true);
- }
- } catch (SQLException e1) {
- e1.printStackTrace();
- }
- }finally{
- JDBCUtil.closePreparedStatement(pstm);
- JDBCUtil.closeConnection(con);
- }
- }
- }
- 這是Statement的代碼,同上:
- stm = con.createStatement();
- con.setAutoCommit(false);
- // 若不出現異常,則繼續執行到try語句完,否則跳轉到catch語句中
- stm.addBatch("insert into student values(23,'tangbao','高數',100)");
- stm.addBatch("insert into student values(24,'王定','c#',98)");
- stm.addBatch("insert into student values(25,'王國雲','java',90)");
- stm.addBatch("insert into student values(26,'溜出','英語',89)");
- stm.addBatch("insert into student values(27,'wqde','java',63)");
- /*
- * int[] executeBatch() throws
- * SQLException將一批命令提交給數據庫來執行,如果全部命令執行成功,則返回更新計數組成的數組。
- */
- stm.executeBatch();