jdbc批量匯入資料

2021-06-10 14:34:01 字數 1864 閱讀 6468

jdbc批量插入主要用於資料匯入和日誌記錄因為日誌一般都是先寫在檔案下的等。 

我用mysql 5.1.5的jdbc driver 分別對三種比較常用的方法做了測試 

try 

prest.executebatch();

conn.commit();

conn.close();

} catch (sqlexception ex) catch (classnotfoundexception ex)

說明下在建statement的時候,後面兩個引數的意義: 

第乙個引數指定 resultset 的型別。其選項有: 

type_forward_only

:預設型別。只允許向前訪問一次,並且不會受到其他使用者對該資料庫所作更改的影響。 

type_scroll_insensitive

:允許在列表中向前或向後移動,甚至可以進行特定定位,例如移至列表中的第四個記錄或者從當前位置向後移動兩個記錄。不會受到其他使用者對該資料庫所作更改的影響。 

type_scroll_sensitive

:象 type_scroll_insensitive 一樣,允許在記錄中定位。這種型別受到其他使用者所作更改的影響。如果使用者在執行完查詢之後刪除乙個記錄,那個記錄將從 resultset 中消失。類似的,對資料值的更改也將反映在 resultset 中。 

第二個引數設定 resultset 的併發性,該引數確定是否可以更新 resultset。其選項有: 

concur_read_only

:這是預設值,指定不可以更新 

resultset concur_updatable:指定可以更新 resultset 

方法二 使用statement加批量的方法

conn.setautocommit(false);

statement stmt = conn.createstatement(resultset.type_scroll_sensitive, resultset.concur_read_only);

for(int x = 0; x < size; x++)

stmt.executebatch();

conn.commit();

方法三:直接使用statement

conn.setautocommit(false);

statement stmt = conn.createstatement(resultset.type_scroll_sensitive,

resultset.concur_read_only);

for(int x = 0; x < size; x++)

conn.commit();

使用上述方法分別插入10萬條資料的平均測試時間為: 

方法一:

17.844

s 方法二:

18.421

s 方法三:

16.359

s 可以看出jdbc的batch語句插入不但沒有效能提公升,反而比沒有用batch的時候要慢,當然這可能跟jdbc具體驅動的實現方法有關。 附件中是我測試**,可以用來在自己電腦上跑一下。 

在執行批量插入的時候最主要的是將自動提交取消,這樣不管是否用jdbc的batch語法應該都沒有關係。 

conn.setautocommit(false)

JDBC批量插入資料

一.直接上源 以匯入課表資料為例 批量插入新申請 匯入預設課表 throws sqlexception catch sqlexception e int number ps.executebatch 把剩餘的資料插入 conn.commit 手動提交事務 try catch sqlexception...

jdbc批量更新資料

有些時候,適合用jdbc。比如讀乙個大的excel檔案資料到資料庫 public static listwelfareimport multipartfile file,string id,string businesstype,iwelfaredao welfaredao throws ioexc...

JDBC批量插入資料

批量操作的方式一般有兩種 事務提交方式和批量處理 先將命令的提交方式設為false,即手動提交conn.setautocommit false 最後在所有命令執行完之後再提交事務conn.commit private string url jdbc mysql localhost 3306 test...