怎么批量插入mysql数据库(1000条)

发布网友 发布时间:2022-04-25 04:25

我来回答

2个回答

懂视网 时间:2022-04-30 11:57

static void main(String[] args) { Connection conn = getConn(lsqlurl, luser, lpassword); long startTime = System.currentTimeMillis(); try { PreparedStatement pst = conn.prepareStatement("insert into testmy (id,name,age) values (?,?,?)"); for (int i = 0; i < 2000; i++) { pst.setInt(1, 3); pst.setString(2, "xx"); pst.setInt(3, 10); pst.addBatch(); } pst.executeBatch(); long endTime = System.currentTimeMillis(); System.out.println((endTime - startTime)/1000+"s"); System.out.println("test sql batch--->2000....."); } catch (SQLException e) { e.printStackTrace(); }finally { if(conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

你会发现时间会是30s 左右。
2k行的数据插入就30秒 。
2w行数据插入时间为940秒(约16min)。

2、修改自动提交的 batch

public static void main(String[] args) {
 Connection conn = getConn(lsqlurl, luser, lpassword);
 long startTime = System.nanoTime();
 try {
  conn.setAutoCommit(false);
  PreparedStatement pst = conn.prepareStatement("insert into test (id,name,age) values (?,?,?)");
  for (int i = 0; i < 2000; i++) {
  pst.setInt(1, 3);
  pst.setString(2, "xx");
  pst.setInt(3, 10);
  pst.addBatch();
  }
  pst.executeBatch();
  conn.commit();
  long endTime = System.nanoTime();
  System.out.println((endTime - startTime)/1000000+"ms");
  System.out.println("test sql batch--->2000.....");
 } catch (SQLException e) {
  try {
  conn.rollback();
  } catch (SQLException e1) {
  e1.printStackTrace();
  }
  e.printStackTrace();
 }finally {
  if(conn!=null) {
  try {
   conn.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  }
 }
 }

2k行插入耗时大概是260ms。
2w行数据插入大概是1.4s。
其实结果很明显的。

因为在使用batch时数据量达到一定的值后数据库会自动提交。而不是你执行executeBatch时再执行。所以我们需要修改自动提交变成手动提交。
这里还有一个问题是:当你实在执行事务时,一旦出错的时候,自动提交会帮你rollback,手动提交时就应该自己进行回退。
所以在catch里需要添加 rollback 。

好了,综上我们可以使用自动提交的batch进行大量数据的插入。

版权声明:本文为博主原创文章,未经博主允许不得转载。

mysql数据库批量快速插入

标签:数据库

热心网友 时间:2022-04-30 09:05

常见的insert语句,向数据库中,一条语句只能插入一条数据:
insert
into
persons
(id_p,
lastname
,
firstname,
city
)
values(204,'haha'
,
'deng'
,
'shenzhen');
(如上,仅插入了一条记录)
怎样一次insert插入多条记录呢?
使用示例:
insert
into
persons
(id_p,
lastname
,
firstname,
city
)
values
(200,'haha'
,
'deng'
,
'shenzhen'),
(201,'haha2'
,
'deng'
,
'gd'),
(202,'haha3'
,
'deng'
,
'beijing');
这样就批量插入数据了,
遵循这样的语法,就可以批量插入数据了。
执行成功,截图:
据说,在程序开发中,一次插入多条数据,比逐次一条一条的插入数据,效率高很多
所以在程序开发的时候,使用此批量插入,也是比较不错的。
此语句在mysql
5,
postgresql
9.3执行通过。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com