日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

javaweb学习总结(三十六)——使用JDBC进行批处理

發布時間:2024/9/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javaweb学习总结(三十六)——使用JDBC进行批处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在實際的項目開發中,有時候需要向數據庫發送一批SQL語句執行,這時應避免向數據庫一條條的發送執行,而應采用JDBC的批處理機制,以提升執行效率。
  JDBC實現批處理有兩種方式:statement和preparedstatement

一、使用Statement完成批處理

  1、使用Statement對象添加要批量執行SQL語句,如下:

1 Statement.addBatch(sql1); 2 Statement.addBatch(sql2); 3 Statement.addBatch(sql3);

  2、執行批處理SQL語句:Statement.executeBatch();
  3、清除批處理命令:Statement.clearBatch();

1.1、使用Statement完成批處理范例

  1、編寫測試的SQL腳本創建表

1 create table testbatch 2 ( 3 id int primary key, 4 name varchar(20) 5 );

  2、編寫測試代碼,如下所示:

1 package me.gacl.demo;2 3 import java.sql.Connection;4 import java.sql.ResultSet;5 import java.sql.Statement;6 import me.gacl.utils.JdbcUtils;7 import org.junit.Test;8 9 /** 10 * @ClassName: JdbcBatchHandleByStatement 11 * @Description: 使用Statement實現JDBC批處理操作 12 * @author: 孤傲蒼狼 13 * @date: 2014-9-20 下午10:05:45 14 * 15 */ 16 public class JdbcBatchHandleByStatement { 17 18 @Test 19 public void testJdbcBatchHandleByStatement(){ 20 Connection conn = null; 21 Statement st = null; 22 ResultSet rs = null; 23 try{ 24 conn = JdbcUtils.getConnection(); 25 String sql1 = "insert into testbatch(id,name) values(1,'aaa')"; 26 String sql2 = "insert into testbatch(id,name) values(2,'bbb')"; 27 String sql3 = "insert into testbatch(id,name) values(3,'CCC')"; 28 String sql4 = "insert into testbatch(id,name) values(4,'DDD')"; 29 String sql5 = "update testbatch set name='gacl' where id=1"; 30 String sql6 = "insert into testbatch(id,name) values(5,'FFF')"; 31 String sql7 = "delete from testbatch where id=2"; 32 st = conn.createStatement(); 33 //添加要批量執行的SQL 34 st.addBatch(sql1); 35 st.addBatch(sql2); 36 st.addBatch(sql3); 37 st.addBatch(sql4); 38 st.addBatch(sql5); 39 st.addBatch(sql6); 40 st.addBatch(sql7); 41 //執行批處理SQL語句 42 st.executeBatch(); 43 //清除批處理命令 44 st.clearBatch(); 45 }catch (Exception e) { 46 e.printStackTrace(); 47 }finally{ 48 JdbcUtils.release(conn, st, rs); 49 } 50 } 51 }

1.2、采用Statement.addBatch(sql)方式實現批處理的優缺點

  采用Statement.addBatch(sql)方式實現批處理:
    優點:可以向數據庫發送多條不同的SQL語句。
    缺點:SQL語句沒有預編譯。
    當向數據庫發送多條語句相同,但僅參數不同的SQL語句時,需重復寫上很多條SQL語句。例如:

1 Insert into user(name,password) values('aa','111'); 2 Insert into user(name,password) values('bb','222'); 3 Insert into user(name,password) values('cc','333'); 4 Insert into user(name,password) values('dd','444');

二、使用PreparedStatement完成批處理

2.1、使用PreparedStatement完成批處理范例

  測試代碼如下:

1 package me.gacl.demo;2 3 import java.sql.Connection;4 import java.sql.PreparedStatement;5 import java.sql.ResultSet;6 import me.gacl.utils.JdbcUtils;7 import org.junit.Test;8 9 /** 10 * @ClassName: JdbcBatchHandleByStatement 11 * @Description: 使用prepareStatement實現JDBC批處理操作 12 * @author: 孤傲蒼狼 13 * @date: 2014-9-20 下午10:05:45 14 * 15 */ 16 public class JdbcBatchHandleByPrepareStatement { 17 18 @Test 19 public void testJdbcBatchHandleByPrepareStatement(){ 20 long starttime = System.currentTimeMillis(); 21 Connection conn = null; 22 PreparedStatement st = null; 23 ResultSet rs = null; 24 25 try{ 26 conn = JdbcUtils.getConnection(); 27 String sql = "insert into testbatch(id,name) values(?,?)"; 28 st = conn.prepareStatement(sql); 29 for(int i=1;i<1000008;i++){ //i=1000 2000 30 st.setInt(1, i); 31 st.setString(2, "aa" + i); 32 st.addBatch(); 33 if(i%1000==0){ 34 st.executeBatch(); 35 st.clearBatch(); 36 } 37 } 38 st.executeBatch(); 39 }catch (Exception e) { 40 e.printStackTrace(); 41 }finally{ 42 JdbcUtils.release(conn, st, rs); 43 } 44 long endtime = System.currentTimeMillis(); 45 System.out.println("程序花費時間:" + (endtime-starttime)/1000 + "秒!!"); 46 } 47 }

2.2、采用PreparedStatement.addBatch()方式實現批處理的優缺點

  采用PreparedStatement.addBatch()實現批處理
    優點:發送的是預編譯后的SQL語句,執行效率高。
    缺點:只能應用在SQL語句相同,但參數不同的批處理中。因此此種形式的批處理經常用于在同一個表中批量插入數據,或批量更新表的數據。

  關于JDBC批處理的內容就總結這么多。

http://www.cnblogs.com/xdp-gacl/p/3983253.html

總結

以上是生活随笔為你收集整理的javaweb学习总结(三十六)——使用JDBC进行批处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。