Java向数据库中插入大量数据时的优化

转载 2012年03月29日 15:19:56
http://home.searchfull.net:8080/2422914-java+%E6%95%B0%E6%8D%AE+%E5%BA%93%E4%B8%AD+.html

PreparedStatement ps = null;
for(int i = 0; i < 100000; i++) {

    ps = con.prepareStatement(sql);
    ps.executeUpdate();
}

以前处理大量数据时总是使用如上方法,处理速度相当慢。今天经理教了个新招。如下:



PreparedStatement ps = con.prepareStatement(sql);
for(int i = 0; i < 100000; i++) {
    ps.setString(1, "1");
    ps.setString(2, "2");
    ps.addBatch();
}
ps.executeBatch();

这样执行的就是批操作。上传100000数据比我之前方法快了nnnnnnnnnnnn倍。得把之前写的都改掉。

-----------------------------
http://762626559-qq-com.iteye.com/blog/392889

使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试:

//1.使用statement插入100000条记录



public void exec(Connection conn){

  try {

   Long beginTime = System.currentTimeMillis();

   conn.setAutoCommit(false);//设置手动提交

   Statement st = conn.createStatement();

   for(int i=0;i<100000;i++){

    String sql="insert into t1(id) values ("+i+")";

    st.executeUpdate(sql); 

   }

   Long endTime = System.currentTimeMillis();

   System.out.println("st:"+(endTime-beginTime)/1000+"秒");//计算时间

   st.close();

   conn.close();

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  } 

}

//2.使用PreparedStatement对象

public void exec2(Connection conn){

  try {

   Long beginTime = System.currentTimeMillis();

   conn.setAutoCommit(false);//手动提交

   PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");

   for(int i=0;i<100000;i++){

    pst.setInt(1, i);

    pst.execute();   

   }

   conn.commit();

   Long endTime = System.currentTimeMillis();

   System.out.println("pst:"+(endTime-beginTime)/1000+"秒");//计算时间

   pst.close();

   conn.close();

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

}

//3.使用PreparedStatement + 批处理

public void exec3(Connection conn){

  try {

   conn.setAutoCommit(false);

   Long beginTime = System.currentTimeMillis();

   PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");

  

   for(int i=1;i<=100000;i++){   

    pst.setInt(1, i);

    pst.addBatch();

    if(i%1000==0){//可以设置不同的大小;如50,100,500,1000等等

     pst.executeBatch();

     conn.commit();

     pst.clearBatch();

    }

   }

   Long endTime = System.currentTimeMillis();

   System.out.println("pst+batch:"+(endTime-beginTime)/1000+"秒");

   pst.close();

   conn.close();

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

}

在Oracle 10g中测试,结果:

1.使用statement耗时142秒;

2.使用PreparedStatement耗时56秒;

3.使用PreparedStatement + 批处理耗时:

a.50条插入一次,耗时5秒;

b.100条插入一次,耗时2秒;

c.1000条以上插入一次,耗时1秒;

通过以上可以得出结论,在使用jdbc大批量插入数据时,明显使用第三种方式(PreparedStatement + 批处理)性能更优。

如何向mysql中插入大量数据

有时为了做性能测试,需要向mysql中插入大量的测试用数据,以下介绍
  • ljfrocky
  • ljfrocky
  • 2014年08月12日 22:42
  • 2231

用Java向数据库中插入大量数据时的优化

使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试:  public void e...
  • liuxigiant
  • liuxigiant
  • 2013年11月25日 09:53
  • 13188

C#一次性向数据库插入上万条数据的方法

一次性插入上万条数据的写法 1. [csharp] view plaincopy ///        /// DataTable批量添加(有事务...
  • fzzsh
  • fzzsh
  • 2016年01月07日 15:37
  • 2740

如何控制Java代码向数据库中插入数据

控制Java代码向数据库中添加数据有四步:第一步加载驱动,第二步连接数据库,第三步创建PrepareStatement对象,第四步关闭资源 //下面是增加的方法 public void insert_...
  • m_h7769
  • m_h7769
  • 2017年09月04日 21:19
  • 378

java中向数据库中插入date数据类型

java中向数据库中插入date数据类型要求为2007-06-13格式,因为数据库中的时间类型就是datetime类的。求救.....请高手指导用什么方法可以插入该数据类型......
  • duizhang1108
  • duizhang1108
  • 2007年06月13日 21:10
  • 749

java 使用jdbc向mysql数据库中插入1亿条数据

package com.ddx.zhang; import java.sql.SQLException; import java.util.UUID; public class JDBCTest ...
  • zhangbest2009
  • zhangbest2009
  • 2016年03月09日 16:18
  • 2644

转载自大牛的博文-解决大批量插入数据到数据库中的问题

Hibernate批处理操作优化 (批量插入、更新与删除)
  • bestcxx
  • bestcxx
  • 2016年04月13日 15:49
  • 3079

JDBC批处理-大量数据插入数据库减少插入时间

背景: 由于需要大量的往数据库中进行插入,那么许多框架下已经写好的插入方法将会大大的提高插入时间,对于效率是非常不友好的。那么直接使用jdbc的批处理导入,自己对数据库进行开关,则会大大缩短插入时间。...
  • u013728415
  • u013728415
  • 2017年04月25日 10:26
  • 459

大数据量下的数据库查询与插入如何优化? (整理)

数据库经常要做一些查询与插入,但是如果查询和插入的数据量过大的时候就会引发数据库性能问题,降低数据库工作效率。因此性能调优是大家在工作中都能够预见的问题,大到世界五百强的核心系统,小到超市的库存系统,...
  • opzoonzhuzhengke
  • opzoonzhuzhengke
  • 2014年09月11日 21:12
  • 3059

【Java/JDBC.ORM】 jdbc插入大量数据时优化处理

转自:http://blog.csdn.net/xiashan17/article/details/6049587 这个就是做个练习.想看下JDBC的最大优化度. 我的要求就是插入...
  • robinjwong
  • robinjwong
  • 2015年04月19日 18:06
  • 3898
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java向数据库中插入大量数据时的优化
举报原因:
原因补充:

(最多只允许输入30个字)