亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

使用JDBC在MySQL數據庫中如何快速批量插入數據

2024-07-24 13:11:04
字體:
來源:轉載
供稿:網友

使用JDBC連接MySQL數據庫進行數據插入的時候,特別是大批量數據連續插入(10W+),如何提高效率呢?

在JDBC編程接口中Statement 有兩個方法特別值得注意:

void addBatch() throws SQLException

Adds a set of parameters to this PreparedStatement object's batch of commands.

int[] executeBatch() throws SQLException

Submits a batch of commands to the database for execution and if all commands execute successfully, returns an array of update counts. The int elements of the array that is returned are ordered to correspond to the commands in the batch, which are ordered according to the order in which they were added to the batch.

通過使用addBatch()和executeBatch()這一對方法可以實現批量處理數據。

不過值得注意的是,首先需要在數據庫鏈接中設置手動提交,connection.setAutoCommit(false),然后在執行Statement之后執行connection.commit()。

package cyl.demo.ipsearcher;  import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;  public class DbStoreHelper {    private String insert_sql;   private String charset;   private boolean debug;    private String connectStr;   private String username;   private String password;    public DbStoreHelper() {     connectStr = "jdbc:mysql://localhost:3306/db_ip";     // connectStr += "?useServerPrepStmts=false&rewriteBatchedStatements=true";     insert_sql = "INSERT INTO tb_ipinfos (iplong1,iplong2,ipstr1,ipstr2,ipdesc) VALUES (?,?,?,?,?)";     charset = "gbk";     debug = true;     username = "root";     password = "***";   }    public void storeToDb(String srcFile) throws IOException {     BufferedReader bfr = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile), charset));     try {       doStore(bfr);     } catch (Exception e) {       e.printStackTrace();     } finally {       bfr.close();     }   }    private void doStore(BufferedReader bfr) throws ClassNotFoundException, SQLException, IOException {     Class.forName("com.mysql.jdbc.Driver");     Connection conn = DriverManager.getConnection(connectStr, username,password);     conn.setAutoCommit(false); // 設置手動提交     int count = 0;     PreparedStatement psts = conn.prepareStatement(insert_sql);     String line = null;     while (null != (line = bfr.readLine())) {       String[] infos = line.split(";");       if (infos.length < 5)  continue;       if (debug) {         System.out.println(line);       }       psts.setLong(1, Long.valueOf(infos[0]));       psts.setLong(2, Long.valueOf(infos[1]));       psts.setString(3, infos[2]);       psts.setString(4, infos[3]);       psts.setString(5, infos[4]);       psts.addBatch();     // 加入批量處理       count++;           }     psts.executeBatch(); // 執行批量處理     conn.commit(); // 提交     System.out.println("All down : " + count);     conn.close();   }  } 

執行完成以后:

All down : 103498 
Convert finished. 
All spend time/s : 47 

一共10W+,執行時間一共花費 47 秒.

這個效率仍然不高,似乎沒有達到想要的效果,需要進一步改進。

在MySQL JDBC連接字符串中還可以加入參數,

rewriteBatchedStatements=true,mysql默認關閉了batch處理,通過此參數進行打開,這個參數可以重寫向數據庫提交的SQL語句。

useServerPrepStmts=false,如果不開啟(useServerPrepStmts=false),使用com.mysql.jdbc.PreparedStatement進行本地SQL拼裝,最后送到db上就是已經替換了?后的最終SQL.

在此稍加改進,連接字符串中加入下面語句(代碼構造方法中去掉注釋):
connectStr += "?useServerPrepStmts=false&rewriteBatchedStatements=true";

再次執行如下:

All down : 103498 
Convert finished. 
All spend time/s : 10 

同樣的數據量,這次執行只花費了10秒 ,處理效率大大提高.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩免费区域视频在线观看| 91社影院在线观看| 欧美尺度大的性做爰视频| 久久久久久伊人| 国产精品一区二区久久| 国产在线999| 亚洲欧美在线x视频| 亚洲电影免费观看高清完整版在线观看| 夜夜嗨av色综合久久久综合网| 亚洲国产欧美一区二区丝袜黑人| 精品福利在线视频| 亚洲国产精品电影| 成人黄色av网| 久久躁狠狠躁夜夜爽| 亚洲午夜精品久久久久久性色| 亚洲美女久久久| 欧美大尺度激情区在线播放| 欧美激情小视频| 久热精品视频在线免费观看| 日本久久91av| 国产一区二区久久精品| 久久九九免费视频| 亚洲精选一区二区| 国产亚洲精品美女| 国产日韩亚洲欧美| 国产成人自拍视频在线观看| 国产精品678| 欧美丰满片xxx777| 国产噜噜噜噜噜久久久久久久久| 国产精品大陆在线观看| 国产精品老牛影院在线观看| 欧美国产精品日韩| 深夜精品寂寞黄网站在线观看| 亚洲人av在线影院| 国产精品久久久久久久电影| 日本三级久久久| 在线播放国产一区二区三区| 国产91色在线|免| 97精品国产91久久久久久| 国产精品久久久久高潮| 欧美日韩激情视频| 国产一区二区三区在线观看视频| 亚洲国产欧美日韩精品| 国产亚洲欧美日韩一区二区| 欧美壮男野外gaytube| 亚洲白虎美女被爆操| 精品美女久久久久久免费| 国产精品av在线| 国产综合久久久久久| 国产精品美女免费视频| 国产区精品视频| 久久五月天色综合| 久久99国产精品自在自在app| 欧美一区二区大胆人体摄影专业网站| 欧美国产一区二区三区| 中文国产成人精品| 狠狠做深爱婷婷久久综合一区| 亚洲第一色在线| 中文字幕少妇一区二区三区| 久久精品在线播放| 97在线看免费观看视频在线观看| 亚洲欧美在线免费| 91免费看片在线| 久久免费少妇高潮久久精品99| 国产成人精品最新| 色婷婷亚洲mv天堂mv在影片| 日韩大片免费观看视频播放| 精品久久久久久久久国产字幕| 91在线观看免费高清| 欧美一级免费视频| 中文字幕亚洲欧美日韩在线不卡| 亚洲国内高清视频| 日韩在线视频播放| 九九热这里只有在线精品视| 91牛牛免费视频| 国产亚洲精品一区二555| 91免费视频国产| 理论片在线不卡免费观看| 77777少妇光屁股久久一区| 自拍视频国产精品| 草民午夜欧美限制a级福利片| 欧美一二三视频| 国产成人av网| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲成人黄色网址| 国产精品视频免费在线观看| 亚洲片av在线| 亚洲成年人影院在线| 亚洲欧美日韩图片| 国产欧亚日韩视频| 91干在线观看| 欧美日韩在线免费观看| 日韩电影在线观看中文字幕| 欧美一区二区影院| 大荫蒂欧美视频另类xxxx| 66m—66摸成人免费视频| 国产主播精品在线| 欧美成年人在线观看| 亚洲福利视频网站| 一区二区三区国产视频| 国产欧美日韩最新| 欧美日韩精品在线观看| 日韩麻豆第一页| www.亚洲成人| 亚洲电影免费观看高清完整版在线| 亚洲自拍高清视频网站| 亚洲成人三级在线| 97在线视频免费播放| 欧美激情精品久久久久久蜜臀| 国产精品久久久久久久久久小说| 欧美xxxwww| 久久综合国产精品台湾中文娱乐网| 奇米一区二区三区四区久久| 97精品一区二区视频在线观看| 日韩专区在线播放| 蜜臀久久99精品久久久久久宅男| 国产xxx69麻豆国语对白| 成人亚洲综合色就1024| 日本不卡免费高清视频| 欧美亚洲另类制服自拍| 懂色aⅴ精品一区二区三区蜜月| 欧美美女15p| 91日韩在线视频| 国产乱人伦真实精品视频| 国产成人高清激情视频在线观看| 综合欧美国产视频二区| 日韩免费高清在线观看| 久久视频中文字幕| 全亚洲最色的网站在线观看| 一色桃子一区二区| 亚洲天堂av综合网| 国产成人拍精品视频午夜网站| 成人国产在线视频| 日韩视频在线观看免费| 91国产一区在线| 欧美裸体xxxxx| 中文字幕久精品免费视频| 伊人久久久久久久久久久| 97成人在线视频| 欧美性受xxxx黑人猛交| 日韩在线激情视频| 亚洲福利视频网| 自拍偷拍亚洲欧美| 全球成人中文在线| 成人久久一区二区三区| 欧洲美女7788成人免费视频| 日韩在线观看精品| 亚洲人成网站999久久久综合| 欧洲午夜精品久久久| 国产va免费精品高清在线观看| 欧美激情精品久久久久久大尺度| 国产精品一区二区久久久久| 91大神在线播放精品| 国产精品视频xxxx| 国产日本欧美一区二区三区| 琪琪亚洲精品午夜在线| 日韩最新免费不卡| 久久久久久久久中文字幕| 国产亚洲精品激情久久| 国产精品成人观看视频国产奇米| 日韩在线观看视频免费| 亚洲日本成人女熟在线观看| 在线视频精品一| 国产激情久久久久|