jdbc批量插入主要用於資料匯入和日誌記錄因為日誌一般都是先寫在檔案下的等。
方法一,使用preparedstatement加批量的方法
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.844s
方法二:18.421s
方法三:16.359s
可以看出jdbc的batch語句插入不但沒有效能提公升,反而比沒有用batch的時候要慢,當然這可能跟jdbc具體驅動的實現方法有關。 附件中是我測試**,可以用來在自己電腦上跑一下。
在執行批量插入的時候最主要的是將自動提交取消,這樣不管是否用jdbc的batch語法應該都沒有關係。
conn.setautocommit(false)
jdbc批量操作的三種方法
connection conn drivermanager.getconnection url,name,password conn.setautocommit false 關閉連線的自動提交 string sql insert into table value preparedstatement ...
JDBC獲取新插入記錄id的三種方法
在一對多的關聯操作中,通常在一方插入記錄後,需要獲取到當前記錄的id,以方便進行多方的插入操作。要解決這一問題,在jdbc中至少有三種不同的實現方法 1.在插入語句後新增一條查詢,利用resultset來得到id號 psmt con.preparestatement insert into orde...
利用JDBC獲取新插入記錄id的三種方法
在一對多的關聯操作中,通常在一方插入記錄後,需要獲取到當前記錄的id,以方便進行多方的插入操作。要解決這一問題,在jdbc中至少有三種不同的實現方法 1.在插入語句後新增一條查詢,利用resultset來得到id號 psmt con.preparestatement insert into orde...