使用JDBC進行批處理
在實際的專案開發中,有時候需要向資料庫傳送一批SQL語句執行,這時應避免向資料庫一條條的傳送執行,而應採用JDBC的批處理機制,以提升執行效率。
JDBC實現批處理有兩種方式:
- 第一種方式:
Statement.addBatch(sql)
- 第二種方式:
PreparedStatement.addBatch()
使用Statement完成批處理
使用Statement物件新增要批量執行的SQL語句,如下:
Statement.addBatch(sql1); Statement.addBatch(sql2); Statement.addBatch(sql3);
執行批處理SQL語句
Statement.executeBatch();
清除批處理命令
Statement.clearBatch();
使用Statement完成批處理範例
編寫測試的SQL指令碼建立表。
create table testbatch ( id varchar(40) primary key, name varchar(40) );
編寫測試程式碼,如下所示:
public class Demo3 { /* create table testbatch ( id varchar(40) primary key, name varchar(40) ); */
採用Statement.addBatch(sql)方式實現批處理的優缺點
採用Statement.addBatch(sql)方式實現批處理:
- 優點:可以向資料庫傳送多條不同的SQL語句。
缺點:
- SQL語句沒有預編譯。
當向資料庫傳送多條語句相同,但僅引數不同的SQL語句時,需重複寫上很多條SQL語句。例如:
Insert into user(name,password) values(‘aa’,’111’); Insert into user(name,password) values(‘bb’,’222’); Insert into user(name,password) values(‘cc’,’333’); Insert into user(name,password) values(‘dd’,’444’);
使用PreparedStatement完成批處理
使用PreparedStatement完成批處理範例
public class Demo3 {
/*
create table testbatch
(
id varchar(40) primary key,
name varchar(40)
);
*/
// 實現批處理的第二種方式
@Test
public void test2() throws SQLException {
long starttime = System.currentTimeMillis();
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
String sql1 = "insert into testbatch(id,name) values(?,?)"; // 1.適合做批量插入和批量更新 2.傳送的sql語句都預編譯過,效能會好一點。實際開發裡,此種方式用到的多一點。
st = conn.prepareStatement(sql1);
/*
st.setString(1, "1");
st.setString(2, "李阿雲");
st.addBatch(); // 把PreparedStatement物件內部封裝的sql語句加入到PreparedStatement物件內部的List集合中
st.setString(1, "2");
st.setString(2, "葉一");
st.addBatch(); // 此時PreparedStatement物件內部的List集合中有兩條sql語句
*/
// 批處理一千萬條sql語句,會出現OutOfMemoryError:Java heap space——記憶體溢位
/*
for (int i = 1; i <= 10000000; i++) {
st.setString(1, i+"");
st.setString(2, "葉一"+i);
st.addBatch();
}
st.executeBatch();
*/
for (int i = 1; i <= 10000006; i++) {
st.setString(1, i+"");
st.setString(2, "葉一"+i);
st.addBatch();
if (i%1000==0) {
st.executeBatch();
st.clearBatch();
}
st.executeBatch(); // 剩下不到1000條sql語句也需要執行
}
} finally {
JdbcUtils.release(conn, st, rs);
}
long endtime = System.currentTimeMillis();
System.out.println("共花了:"+(endtime-starttime)/1000+"秒"); // 向MySQL資料庫批插入1000萬條記錄,大概需要3個多小時。而Oracle資料庫測試大概需要380秒
}
}
採用PreparedStatement.addBatch()方式實現批處理的優缺點
採用PreparedStatement.addBatch()實現批處理
- 優點:傳送的是預編譯後的SQL語句,執行效率高。
- 缺點:只能應用在SQL語句相同,但引數不同的批處理中。因此此種形式的批處理經常用於在同一個表中批量插入資料,或批量更新表的資料。
關於JDBC批處理的內容就總結這麼多。
相關推薦
使用JDBC進行批處理
在實際的專案開發中,有時候需要向資料庫傳送一批SQL語句執行,這時應避免向資料庫一條條的傳送執行,而應採用JDBC的批處理機制,以提升執行效率。 JDBC實現批處理有兩種方式: 第一種方式:Statement.addBatch(sql) 第二種方式:Pre
JDBC進行批處理的四種方式
這裡以MySQL資料庫為例來展示四種通過jdbc實現批處理的四種方法,這裡只舉例了插入100條資料的寫法,其他大致相同。 第一種:最簡單,最好理解的(不要這樣寫) (沒工作經驗可能會這樣寫,執行效率
比較JDBC和Mybatis進行批處理時的效能比較
執行批量操作時,做了個比較Mybatis和JDBC執行時間的記錄,JDBC還是強大太多了! jdbc.properties檔案 jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterE
Java的jdbc使用addBatch進行批處理操作的幾種方式
方式一、批量執行預定義模式的SQL public static void exeBatch(Connection conn) { try { String sql = "insert into t_example (code, name) values (?,?)";
批處理(一):使用WorkspaceRunner進行批處理
原文連結: https://knowledge.safe.com/articles/1469/batch-processing-using-the-workspacerunner-1.html?smartspace=chaining-workspaces 一、介紹 WorkspaceRu
玩轉MySQL -----JDBC 的批處理
自動增長(只有int型可以自動增長) 除了在資料庫圖形介面設定外: 還可以在java中用這句程式碼:st.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS); statement //獲取insert時生成的自動增
JDBC從入門到放棄-06:JDBC的批處理
JDBC從入門到放棄 06-JDBC的批處理 當有成批插入或者更新記錄的需求時,可以採用JDBC的批量更新機制,這一機制允許多條語句一次性的提交給資料庫批量處理。通常情況下比單獨處理要更有效率。 批量處理一般流程。 假設我們有100000條資料要插入的資料庫,採用批處
對圖片命名進行批處理修改
最近在研究深度學習,需要對圖片進行TFrecord格式的轉換,可是收集到的訓練圖片命名格式千變萬化,沒有一個統一格式,看起來很不舒服。於是希望通過一個指令碼函式對其進行批處理重新命名。 # -*- coding: utf-8 -*- """ Created on Mon Nov 5 23:41
【python】pytorch中如何使用DataLoader對資料集進行批處理
第一步: 我們要建立torch能夠識別的資料集型別(pytorch中也有很多現成的資料集型別,以後再說)。 首先我們建立兩個向量X和Y,一個作為輸入的資料,一個作為正確的結果: 隨後我們需要把X和Y組成一個完整的資料集,並轉化為pytorch能
cmd和python兩種進行批處理操作
1.cmd命令列進行批處理,實現對某一檔案下所有檔案進行相同的處理 a.獲取資料夾下的檔案目錄,存入a.txt中 b.由於我是要對檔案進行SectionSing.exe(C++程式產生的exe操作),要進行滿足其格式要求的操作, 可以將所有檔案複製放到excel表格
用PS對多張照片進行批處理的步驟
1.準備錄制動作 開啟一張示例照片,在動作面板中(若無按Alt + F9 出現)新建一個動作,根據要做的操作合理命名,然後點“錄製”; 2.開始錄制動作 經過一系列操作達到效果後,點“儲存為”,
JDBC batch批處理Statement executeBatch 詳解
JDBC提供了資料庫batch處理的能力,在資料大批量操作(新增、刪除等)的情況下可以大幅度提升系統的效能。我以前接觸的一個專案,在沒有采用batch處理時,刪除5萬條資料大概要半個小時左右,後來對系統進行改造,採用了batch處理的方式,刪除5萬條資料基本上不會超過1分鐘。看一段JDBC程式碼: // 關
JDBC操作數據庫之批處理
解決方案 print 數據庫服務器 密碼 red rep 參數 connect jdb JDBC開發中,操作數據庫需要和數據庫建立連接,然後將要執行的SQL語句發送到數據庫服務器,最後關閉數據庫連接,都是按照這樣的操做的,如果按照此流程要執行多條SQL語句,那麽就要建立多個
JDBC入門(4)--- 批處理
集合 for mysql connect 通過 入門 code 這一 匹配 1、Statement批處理 當你有10條SQL語句要執行時,一次向服務器發送一條SQL語句,這樣做的效率上極差,處理的方案是使用批處理,即一次向服務發送多條SQL語句,然後由服務器一次性處理。
JDBC【PreparedStatment、批處理、處理二進制、自動主鍵、調用存儲過程、函數】
參數 高效 gpo 批量處理 資源 key limit 場景 註入 1.PreparedStatement對象 PreparedStatement對象繼承Statement對象,它比Statement對象更強大,使用起來更簡單 Statement對象編譯SQL語句時,如果
通過批處理進行Windows服務的安裝/卸載&啟動/停止
spa windows服務 lse nbsp off checked ram service window 安裝服務 1 @echo off 2 3 set checked=2 4 set PATHS=%~sdp0 5 6 echo 按任意鍵執行安裝……?
JDBC批處理
utils 服務 red min 利用 eat 判斷 防止 實現 批處理: 當我們需要向數據庫中插入大量數據時,批處理會將這些數據打成多個批次addBatch(),統一發送給數據庫服務器執行executeBatch(),減少與數據庫的交互次數提高程序的執行效率。 實現批
JDBC 批處理
!= count test .exe false upd code exceptio nal 主要是是 addBatch ,executeBatch ,clearBatch 三個方法. 官方示例代碼: public void batchUpdate() throw
關於jdbc批處理的一些小問題
一個專案實現過程中難免遇到一些批量執行sql語句的情況,例如執行1萬條插入語句,如果使用傳統的插入方式則需要建立1萬次連線,一次傳送一條sql語句,這樣是及其浪費效能的,接下來通過三種不同的方式模擬批量的插入語句,程式碼如下: package com.lsm1998.shop.test; im
JDBC事務、批處理、大物件的基本使用
一、測試事務的概念和用法 package com.chenfu.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import