JDBC的批处理
(1)Statement完成批處理
(2)PreparedStatement完成批處理
一、Statement完成批處理
(1)步驟:
//添加批處理stm.addBatch(sql);stm.addBatch(sql1);stm.addBatch(sql2);//執行批處理stm.executeBatch();//清除批處理sqlstm.clearBatch();①添加要批量執行的SQL語句
②執行批處理SQL語句
③清除批處理命令
- 優點:可以向數據庫發送多條不同的sql語句。
- 缺點:sql語句沒有預編譯。當向數據庫發送多條語句相同,但僅參數不同的SQL語句時,需重復寫上很多條sql語句。
(2)使用Statement在emp表中批處理sql語句:
package jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;/*** 類說明:* 使用Statement對象執行批處理* @author qianliangguo*/ public class TestStatementBatch {public static void main(String[] args){Connection conn = null;Statement stm = null;try {//1.加載驅動Class.forName("com.mysql.jdbc.Driver");//2.獲取連接String url = "jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf-8";String user = "root";String password = "Hudie";conn = DriverManager.getConnection(url, user, password);//3.創建Statment對象stm = conn.createStatement();String sql = "insert into emp(ename,job,deptno) value('小哪吒','clerk',20)";String sql1 = "insert into emp(ename,job,deptno) value('美人魚','leader',10)";String sql2 = "update emp set ename ='哪吒'where ename='小哪吒'";//4.執行sql語句(使用批處理)stm.addBatch(sql);//添加批處理stm.addBatch(sql1);stm.addBatch(sql2);stm.executeBatch();//執行批處理stm.clearBatch();//清除批處理} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {//釋放資源stm.close();conn.close(); } catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} }二、PreparedStatement完成批處理
(1):關于PreparedStatement
采用PreparedStatement.addBatch()實現批處理。
- 優點:發送的是預編譯后的SQL語句,執行效率高。
- 缺點:只能應用在SQL語句相同,但參數不同的批處理中。此種形式的批處理經常用于在同一個表中批量插入數據,或批量更新表的數據。
(2)使用Statement在emp表中批處理sql語句:
package jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;/*** 類說明:* 使用TestPreparedStatementBatch對象執行批處理* @author qianliangguo*/ public class TestPreparedStatementBatch {public static void main(String[] args){Connection conn = null;PreparedStatement pstm = null;try {//加載驅動Class.forName("com.mysql.jdbc.Driver");//獲取連接String url = "jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf-8";String user = "root";String password = "Hudie";conn = DriverManager.getConnection(url, user, password);String sql = "insert into emp(empno,ename,deptno) values(?,?,?)";//創建preparedStatementpstm = conn.prepareStatement(sql);//pstm綁定數據for(int i= 3019;i<4008;i++){pstm.setInt(1, i);pstm.setString(2,"大魚"+i);pstm.setInt(3,i);//添加批處理pstm.addBatch();//執行批處理,當i是100的倍數時執行一次批處理,然后清除批處理if(i%100 == 0){pstm.executeBatch();pstm.clearBatch();}}//將批處理余下的語句執行完畢pstm.executeBatch();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{//釋放資源try {pstm.close();conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} }上面兩種方式都是向表中添加記錄,所以并不需要進行封裝ResultSet結果集,執行后表格內容如下:
總結
- 上一篇: 【中间件加固】————6、IIS6安全加
- 下一篇: 高会的计算机模块,2017高会《职称计算