使用JDBC串連MySQL資料庫--典型案例分析(七)----批量插入員工資訊,jdbcmysql

來源:互聯網
上載者:User

使用JDBC串連MySQL資料庫--典型案例分析(七)----批量插入員工資訊,jdbcmysql

轉載請註明:張奇的CSDN部落格 - 部落格頻道 - CSDN.NET


問題:

向Emp表中批量插入100條資料,需要插入資料的列為empno,ename以及sal.這三個欄位對應的資料分別為empno列的資料通過序列emp_seq自動產生,ename列的資料為字串 "name"+迴圈次數i組成、sal的資料有隨機產生的10000以內的整數構成。

方案:

每迴圈一次,向資料庫插入一條資料,頻繁的訪問資料庫,效率很低。

在java中專門提供的批處理的API。在對資料庫頻繁操作時,可以使用JDBC批處理方式提高程式的效率。批處理的主要特點如下:

1.使用同一Connection資源,一次發送多條SQL語句執行。

2.提高應用程式與DB之間的輸送量,縮短DB的回應時間

3.與逐條執行SQL的方式相比,需要處理的資料量越大,批處理的優勢越明顯

實現緩衝SQL語句和批量執行,使用Statement實現批處理的核心代碼如下:


步驟一:在Mysql資料中建立序列emp_seq

在Mysql資料庫中建立序列名為emp_sql,該序列的起始值為1,步進為1,SQL語句如下所示:

CREATE TABLE emp_seq ( seq VARCHAR(8));INSERT INTO emp_seq VALUES('0');UPDATE emp_seq SET seq = LAST_INSERT_ID(seq+1);SELECT LAST_INSERT_ID();

步驟二:準備JDBC操作資料庫的基本代碼

首先建立類Batch,在該類中建立batchAdd方法,然後,準備資料庫連接Connection對象,操作SQL語句的Statement對象以及設定交易管理;最後進行異常的處理,代碼如下所示:

package Account;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import java.util.Random;import dao.ConnectionSource;public class Batch {public static void main(String [] args){}public void batchAdd(){Connection con=null;Statement stmt=null;String sql=null;try {con=ConnectionSource.getConnection();stmt=con.createStatement();//關閉自動認可con.setAutoCommit(false);// 提交con.commit();} catch (SQLException e) {System.out.println("資料庫訪問異常!");throw new RuntimeException(e);}finally{try {if(stmt!=null){stmt.close();}if(con!=null){con.close();}} catch (SQLException e) {System.out.println("釋放資源時發生異常!");}}}}
步驟 三:批量向Emp表中插入資料

使用statement的addBatch方法和executeBatch方法,批量向Emp表中插入資料,代碼如下所示:

 

package Account;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import java.util.Random;import dao.ConnectionSource;public class Batch {public static void main(String [] args){}public void batchAdd(){Connection con=null;Statement stmt=null;String sql=null;try {con=ConnectionSource.getConnection();stmt=con.createStatement();//關閉自動認可con.setAutoCommit(false);for(int i=0;i<100;i++){//插入資料的sql語句sql="insert into emp(empno,ename,sal) values("+"emp_seq.nextval,'name"+i+"',"+new Random().nextInt(10000)+")";//將sql語句加入到Batch中stmt.addBatch(sql);}//執行批處理stmt.executeBatch();// 提交con.commit();} catch (SQLException e) {System.out.println("資料庫訪問異常!");throw new RuntimeException(e);}finally{try {if(stmt!=null){stmt.close();}if(con!=null){con.close();}} catch (SQLException e) {System.out.println("釋放資源時發生異常!");}}}}

步驟四:測試是否批量插入資料成功

public static void main(String [] args){Batch batch=new Batch();batch.batchAdd();}

運行前:


運行後:

結果有點問題,上述代碼中有一句是orcle的函數功能,

emp_seq.nextval

目前還沒有找到合適的能啟動並執行類似解決方案,如果你是用orcle作為資料庫的話,那麼就會沒有問題的。

如果找到了適合的好方法的朋友,可以給我評論將  解決方案發一下, 一起交流交流。

等待下節的精彩哦~

























相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.