現(xiàn)在有這么一個需求,要求把2000條記錄插入表中,如果使用java代碼來操作,我們可以使用Statement或者PReparedStatement來實現(xiàn),通過循環(huán)來把SQL語句一條又一條地發(fā)送給數(shù)據(jù)庫處理。我們知道,數(shù)據(jù)庫處理SQL速度是非常快的,如果傳輸速度慢,跟不上處理速度,那么數(shù)據(jù)庫就會出現(xiàn)等待現(xiàn)象。為了解決這個辦法,我們可以一次發(fā)送多個SQL語句給數(shù)據(jù)庫處理,這樣就能增加效率,這時候我們就要用到批處理技術(shù)。
然而,批處理也可以通過Statement和Preparement來實現(xiàn),要用到的主要方法如下:
Statement批處理操作:
void addBatch(String sql) --把SQL語句加到批處理緩沖區(qū)中
int[] executeBatch() --執(zhí)行SQL緩沖區(qū)中的所有語句
void clearBatch() --清空緩存區(qū)中的所有SQL語句
PreparedStatement操作:
void addBatch(String sql) --把一組參數(shù)加到參數(shù)緩沖區(qū)中
int[] executeBatch() --執(zhí)行SQL緩沖區(qū)中的所有參數(shù)組
void clearBatch() --清空緩存區(qū)中的所有參數(shù)組
下面就演示一下這些方法的用法吧~
利用Statement @Test public void batchTest() throws Exception{ //調(diào)用工具類獲取連接 connection = sqlUtil.getconnection(); //生成Statemnt對象 Statement statement = connection.createStatement(); //把若干條SQL語句放到緩沖區(qū)中 for(int i=1;i<=200;i++){ //準(zhǔn)備sql語句 String sql = "insert into worker(wid,wname) values("+i+",'張三"+i+"')"; //添加到緩沖區(qū) statement.addBatch(sql); if(i%20==0){ System.out.println("共"+ i +"條語句插入了表中"); //緩存區(qū)有20條指令時執(zhí)行 statement.executeBatch(); //執(zhí)行完清空緩存區(qū) statement.clearBatch(); } } //關(guān)閉連接 sqlUtil.close(statement, connection); }利用PreparedStatement public void batchTest2() throws Exception{ //調(diào)用工具類獲取連接 connection = sqlUtil.getconnection(); //生成Statemnt對象 PreparedStatement prepS = connection.prepareStatement("insert into worker(wid,wname) values(?,?)"); //把若干條SQL語句放到緩沖區(qū)中 for(int i=1;i<=200;i++){ //設(shè)置參數(shù) prepS.setObject(1, i); String wname = "李四"+i; prepS.setObject(2, wname); //添加到緩沖區(qū) prepS.addBatch(); if(i%20==0){ System.out.println("共"+ i +"條語句插入了表中"); //緩存區(qū)有20條指令時執(zhí)行 prepS.executeBatch(); //執(zhí)行完清空緩存區(qū) prepS.clearBatch(); } } //關(guān)閉連接 sqlUtil.close(prepS, connection); }以上就是利用JDBC實現(xiàn)批處理了~
如果想要執(zhí)行效率最快,我們應(yīng)該使用 prepareStatemnt + 批處理 這樣的方式來執(zhí)行多條SQL語句。
|
新聞熱點
疑難解答