激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Sql Server - jdbc使用PreparedStatement批量插入數(shù)據(jù)的方法

jdbc使用PreparedStatement批量插入數(shù)據(jù)的方法

2021-06-18 17:59木偶Roy Sql Server

這篇文章主要介紹了jdbc使用PreparedStatement批量插入數(shù)據(jù)的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

批量插入

 

 

1. 批量執(zhí)行SQL語句

當(dāng)需要成批插入或者更新記錄時,可以采用Java的批量更新機制,這一機制允許多條語句一次性提交給數(shù)據(jù)庫批量處理。通常情況下比單獨提交處理更有效率

JDBC的批量處理語句包括下面三個方法:

  • addBatch(String):添加需要批量處理的SQL語句或是參數(shù);
  • executeBatch():執(zhí)行批量處理語句;
  • clearBatch():清空緩存的數(shù)據(jù)

通常我們會遇到兩種批量執(zhí)行SQL語句的情況:

  • 多條SQL語句的批量處理;
  • 一個SQL語句的批量傳參;

 

2. 高效的批量插入

舉例:向數(shù)據(jù)表中插入20000條數(shù)據(jù)

數(shù)據(jù)庫中提供一個goods表。創(chuàng)建如下:

?
1
2
3
4
CREATE TABLE goods(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);

實現(xiàn)層次一:使用Statement

?
1
2
3
4
5
6
Connection conn = JDBCUtils.getConnection();
Statement st = conn.createStatement();
for(int i = 1;i <= 20000;i++){
 String sql = "insert into goods(name) values('name_' + "+ i +")";
 st.executeUpdate(sql);
}

實現(xiàn)層次二:使用PreparedStatement

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
long start = System.currentTimeMillis();
  
Connection conn = JDBCUtils.getConnection();
  
String sql = "insert into goods(name)values(?)";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i = 1;i <= 20000;i++){
 ps.setString(1, "name_" + i);
 ps.executeUpdate();
}
  
long end = System.currentTimeMillis();
System.out.println("花費的時間為:" + (end - start));//82340
JDBCUtils.closeResource(conn, ps);

實現(xiàn)層次三

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 * 修改1: 使用 addBatch() / executeBatch() / clearBatch()
 * 修改2:mysql服務(wù)器默認(rèn)是關(guān)閉批處理的,我們需要通過一個參數(shù),讓mysql開啟批處理的支持。
 *    ?rewriteBatchedStatements=true 寫在配置文件的url后面
 * 修改3:使用更新的mysql 驅(qū)動:mysql-connector-java-5.1.37-bin.jar
 *
 */
@Test
public void testInsert1() throws Exception{
 long start = System.currentTimeMillis();
  
 Connection conn = JDBCUtils.getConnection();
  
 String sql = "insert into goods(name)values(?)";
 PreparedStatement ps = conn.prepareStatement(sql);
  
 for(int i = 1;i <= 1000000;i++){
  ps.setString(1, "name_" + i);
   
  //1.“攢”sql
  ps.addBatch();
  if(i % 500 == 0){
   //2.執(zhí)行
   ps.executeBatch();
   //3.清空
   ps.clearBatch();
  }
 }
  
 long end = System.currentTimeMillis();
 System.out.println("花費的時間為:" + (end - start));//20000條:625                                                                         //1000000條:14733 
  
 JDBCUtils.closeResource(conn, ps);
}

實現(xiàn)層次四

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
* 層次四:在層次三的基礎(chǔ)上操作
* 使用Connection 的 setAutoCommit(false)  /  commit()
*/
@Test
public void testInsert2() throws Exception{
 long start = System.currentTimeMillis();
  
 Connection conn = JDBCUtils.getConnection();
  
 //1.設(shè)置為不自動提交數(shù)據(jù)
 conn.setAutoCommit(false);
  
 String sql = "insert into goods(name)values(?)";
 PreparedStatement ps = conn.prepareStatement(sql);
  
 for(int i = 1;i <= 1000000;i++){
  ps.setString(1, "name_" + i);
   
  //1.“攢”sql
  ps.addBatch();
   
  if(i % 500 == 0){
   //2.執(zhí)行
   ps.executeBatch();
   //3.清空
   ps.clearBatch();
  }
 }
  
 //2.提交數(shù)據(jù)
 conn.commit();
  
 long end = System.currentTimeMillis();
 System.out.println("花費的時間為:" + (end - start));//1000000條:4978
  
 JDBCUtils.closeResource(conn, ps);
}

到此這篇關(guān)于jdbc使用PreparedStatement批量插入數(shù)據(jù)的文章就介紹到這了,更多相關(guān)jdbc使用PreparedStatement批量插入數(shù)據(jù)內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/jyroy/p/14704964.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 末成年女av片一区二区 | 国产一区二区国产 | 久久久成人动漫 | 国产亚洲精彩视频 | 极品xxxx欧美一区二区 | 亚洲男人的天堂在线视频 | qyl在线视频精品免费观看 | 国产精品爱久久久久久久 | 亚洲欧美不卡视频 | 羞羞视频免费视频欧美 | 久久蜜桃精品一区二区三区综合网 | 久久久久一区二区三区四区五区 | 国产免费视频一区二区裸体 | 久久精品国产精品亚洲 | 男女羞羞在线观看 | 日韩视频一区二区三区在线观看 | 深夜毛片免费看 | 欧美黄色免费视频 | 成人男女啪啪免费观看网站四虎 | 性aaa| 久久美女免费视频 | 免费欧美一级视频 | 牛牛碰在线 | 国语自产免费精品视频在 | 黄色成年在线观看 | 欧美国产日韩在线 | 久久免费视频一区 | 国产色片| 久久在线精品视频 | 精品一区二区三区免费视频 | v11av在线播放 | 250pp久久新| 成人性视频欧美一区二区三区 | 成年免费大片黄在线观看岛国 | 国产九色91 | 日本中文视频 | 美女黄视频在线观看 | 美女羞羞视频在线观看 | 污视频在线免费 | 午夜伦情电午夜伦情电影 | 国产羞羞视频在线观看免费应用 |