Statement和PreparedStatement批量更新

優點:1.節省傳遞時間。 2.併發處理。java

PreparedStatementc++

1) addBatch()將一組參數添加到PreparedStatement對象內部。sql

2) executeBatch()將一批參數提交給數據庫來執行,若是所有命令執行成功,則返回更新計數組成的數組。數據庫

Statementc#

1) addBatch(String sql)方法會在批處理緩存中加入一條sql語句。數組

2) executeBatch()執行批處理緩存中的全部sql語句。緩存

注意:PreparedStatement中使用批量更新時,要先設置好參數後再使用addBatch()方法加入緩存。批量更新中只能使用更改、刪除或插入語句。併發

Java代碼  收藏代碼spa

  1. Statement批量處理和事務代碼以下:  對象

  2. package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;  

  3. import java.sql.Connection;  

  4. import java.sql.SQLException;  

  5. import java.sql.Statement;  

  6. import com.ambow.day19.jdbc.util.JDBCConAndClo;  

  7. /* 

  8.  *1,首先把Auto commit設置爲false,不讓它自動提交 

  9.  *2,進行手動提交(commit) 

  10.  *3,提交完成後回覆現場將Auto commit,還原爲true, 

  11.  *4,當異常發生執行catch中SQLException時,記得要rollback(回滾); 

  12.  * */  

  13. public class StatementCommitAndRollbackTest {  

  14.     public static void main(String args[]) {  

  15.         Connection con = null;  

  16.         Statement stm = null;  

  17.         try {  

  18.             con = JDBCConAndClo.getConnectionBao();  

  19.             stm = con.createStatement();  

  20.             con.setAutoCommit(false);  

  21.             // 若不出現異常,則繼續執行到try語句完,不然跳轉到catch語句中  

  22.             stm.addBatch("insert into student values(23,'tangbao','高數',100)");  

  23.             stm.addBatch("insert into student values(24,'王定','c#',98)");  

  24.             stm.addBatch("insert into student values(25,'王國雲','java',90)");  

  25.             stm.addBatch("insert into student values(26,'溜出','英語',89)");  

  26.             stm.addBatch("insert into student values(27,'wqde','java',63)");  

  27.             /* 

  28.              * int[] executeBatch() throws 

  29.              * SQLException將一批命令提交給數據庫來執行,若是所有命令執行成功,則返回更新計數組成的數組。 

  30.              */  

  31.             stm.executeBatch();  

  32.             System.out.println("插入成功!");  

  33.             // commit:若成功執行完全部的插入操做,則正常結束  

  34.             con.commit();  

  35.             System.out.println("提交成功!");  

  36.             con.setAutoCommit(true);  

  37.   

  38.         } catch (SQLException e) {  

  39.             e.printStackTrace();  

  40.             try {  

  41.     //rollback: 若出現異常,對數據庫中全部已完成的操做所有撤銷,則回滾到事務開始狀態  

  42.                 if (!con.isClosed()) {  

  43.                     con.rollback();  

  44.                     System.out.println("提交失敗,回滾!");  

  45.                     con.setAutoCommit(true);  

  46.                 }  

  47.             } catch (SQLException e1) {  

  48.                 e1.printStackTrace();  

  49.             } finally {  

  50.                 JDBCConAndClo.closeStatement(stm);  

  51.                 JDBCConAndClo.closeConnection(con);  

  52.             }  

  53.         }  

  54.     }  

  55. }  

  56. PreparedStatement批量處理和事務代碼以下:  

  57. package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;  

  58. import java.sql.Connection;  

  59. import java.sql.PreparedStatement;  

  60. import java.sql.SQLException;  

  61. import com.ambow.day19.jdbc.util.JDBCConAndClo;  

  62.   

  63. /* 

  64.  * PreparedStatement: 

  65.  1.addBatch() 將一組參數添加到 PreparedStatement對象內部 

  66.  2.executeBatch() 將一批參數提交給數據庫來執行,若是所有命令執行成功,則返回更新計數組成的數組。 

  67.  *  

  68.  */  

  69. public class PreparedStatementCommitAndRollbackTest {  

  70.     public static void main(String args[]) {  

  71.         Connection con = null;  

  72.         PreparedStatement pstm = null;  

  73.   

  74.         try {  

  75.             // 1. 創建與數據庫的鏈接  

  76.             con = JDBCConAndClo.getConnectionBao();  

  77.             // 2. 執行sql語句  

  78.             // 1).先建立PreparedStatement語句(發送slq請求):  

  79.             pstm = con.prepareStatement("insert into student values(?,?,?,?)");  

  80.             con.setAutoCommit(false);//1,首先把Auto commit設置爲false,不讓它自動提交  

  81.             // 2) 設置sql語句1  

  82.             pstm.setInt(133);  

  83.             pstm.setString(2,"wangqin");  

  84.             pstm.setString(3"c++");  

  85.             pstm.setDouble(478.5);  

  86.             // 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。  

  87.             pstm.addBatch();  

  88.             // 2) 設置sql語句2  

  89.             pstm.setInt(134);  

  90.             pstm.setString(2,"wuytun");  

  91.             pstm.setString(3"c");  

  92.             pstm.setDouble(477);  

  93.             // 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。  

  94.             pstm.addBatch();  

  95.             // 2) 設置sql語句3  

  96.             pstm.setInt(131);  

  97.             pstm.setString(2,"tetet");  

  98.             pstm.setString(3"c++");  

  99.             pstm.setDouble(490);  

  100.             // 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。  

  101.             pstm.addBatch();  

  102.             // 2) 設置sql語句4  

  103.             pstm.setInt(132);  

  104.             pstm.setString(2,"liug");  

  105.             pstm.setString(3"c");  

  106.             pstm.setDouble(450);  

  107.             // 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。  

  108.             pstm.addBatch();  

  109.             // 4) 將一批參數提交給數據庫來執行,若是所有命令執行成功,則返回更新計數組成的數組。  

  110.             pstm.executeBatch();  

  111.             System.out.println("插入成功!");  

  112.             // 若成功執行完全部的插入操做,則正常結束  

  113.             con.commit();//2,進行手動提交(commit)  

  114.             System.out.println("提交成功!");  

  115.             con.setAutoCommit(true);//3,提交完成後回覆現場將Auto commit,還原爲true,  

  116.   

  117.         } catch (SQLException e) {  

  118.             e.printStackTrace();  

  119.             try {  

  120.                 // 若出現異常,對數據庫中全部已完成的操做所有撤銷,則回滾到事務開始狀態  

  121.                 if(!con.isClosed()){  

  122.                     con.rollback();//4,當異常發生執行catch中SQLException時,記得要rollback(回滾);  

  123.                     System.out.println("插入失敗,回滾!");  

  124.                     con.setAutoCommit(true);  

  125.                 }  

  126.             } catch (SQLException e1) {  

  127.                 e1.printStackTrace();  

  128.             }  

  129.         }finally{  

  130.             JDBCConAndClo.closePreparedStatement(pstm);  

  131.             JDBCConAndClo.closeConnection(con);  

  132.         }  

  133.     }  

  134. }  

 

<!--EndFragment-->  

相關文章
相關標籤/搜索