`
yuelangyc
  • 浏览: 454675 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java-中使用jdbc进行大量数据插入测试.

阅读更多
使用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 + 批处理)性能更优。


本文系转载.非首创.原创地址找不到了.从自己百度空间转过来的.
分享到:
评论

相关推荐

    Jmeter的mysql-connector-java-5.1.6-bin.jar包,纯正靠谱,接口测试性能测试相关JAR包

    在进行MySQL数据库的性能测试时,可以利用JMeter的JDBC Request sampler创建大量并发请求,模拟多个用户同时访问数据库,以此来测试数据库的响应速度、吞吐量和资源利用率。例如,你可以编写SQL查询、存储过程,或者...

    Mybatis与JDBC批量插入MySQL数据库性能测试

    在数据库操作中,批量插入(Batch Insert)是一种提高性能的有效方式,尤其是在处理大量数据时。本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database ...

    读取txt-jdbc导入百万级数据.rar

    8. **错误处理和异常安全**:在处理大量数据时,错误处理至关重要。使用Spring JdbcTemplate可以捕获并处理SQL相关的异常,同时,确保在发生错误时能够正确回滚事务,保持数据一致性。 9. **测试和监控**:在实际...

    Java使用JDBC向MySQL数据库批次插入10W条数据(测试效率)

    在Java开发中,当需要向MySQL数据库大量插入数据时,使用JDBC的批量处理功能可以显著提高效率。本文将详细讲解如何使用JDBC批量插入10万条数据,并探讨其背后的原理和优化策略。 批量处理在JDBC中主要通过Statement...

    mysql-connector-java-8.0.22.jar

    如果测试目标涉及到MySQL数据库,那么就需要使用像`mysql-connector-java-8.0.22.jar`这样的驱动来建立JDBC连接,从而实现对数据库的读写操作。通过配置JMeter的 JDBC Connection Configuration 元素,导入此jar包,...

    apache-jmeter-3.1.zip、jmeter-plugins-manager-0.11.jar、mysql-connector-java-5.1.3

    通过JMeter的JDBC连接配置和采样器,你可以执行SQL查询、插入数据、更新记录,甚至可以测试数据库的读写性能。 使用JMeter时,首先你需要设置一个JDBC连接配置,填写数据库URL(通常格式为`jdbc:mysql://hostname:...

    使用OracleJDBC的Java编程:性能.docx,原文+译文。

    ### 使用Oracle JDBC的Java编程:性能 #### 一、引言与背景 在软件开发过程中,性能优化往往被置于项目后期阶段,而实际上它应当在项目初始阶段就予以考虑。通常情况下,当用户抱怨程序执行特定任务所需时间过长时...

    sharding-jdbc-master.zip

    4. **测试用例**:项目中的测试类会展示如何在代码中使用ShardingDataSource进行数据库操作。可能包括插入数据(写操作)、查询数据(读操作)等,同时验证读写分离的效果。 5. **数据库建库SQL**:压缩包内应该...

    Java_JDBC学习教程 由浅入深.doc

    - JDBC (Java Database Connectivity) 是 Java 语言中用来对关系型数据库进行访问的标准 Java API。 - 它提供了一系列的 API 用于执行 SQL 语句,并获取和处理结果。 - JDBC 的主要作用在于让 Java 应用程序能够通过...

    mysql千万级数据脚本测试shardingjdbc-course.zip

    在千万级数据测试中,这些脚本可能用于模拟实际业务场景,例如,创建课程表,插入大量课程记录,然后进行各种查询操作,以此来验证ShardingJDBC的分片策略和性能。 在SQL方面,以下是一些关键知识点: 1. **索引...

    springboot-jdbc.zip

    集成测试也是项目中重要的一环,你可能在`src/test/java`目录下看到一些测试类,使用`@Autowired`注入数据源,并通过`JdbcTemplate`进行测试用例的编写,确保数据库操作的正确性。 总结来说,“springboot-jdbc.zip...

    jdbc批量操作数据分析与实例

    本文将通过对一个具体的Java程序示例(使用JDBC进行数据批量插入与逐条插入)的分析,探讨批量操作的优势及其在不同数据量下的性能表现。 #### 二、JDBC批量操作与逐条插入概述 在Java开发中,JDBC (Java Database...

    apache jmeter连接clickhouse所需jar包.zip

    在使用JMeter进行Clickhouse的性能测试时,可以设计不同的测试场景,例如模拟大量并发用户查询、插入或更新数据,以此评估Clickhouse的处理能力和响应时间。 5. **注意事项**: - 需要确保JMeter运行环境的Java...

    基于JDBC控制台的超市管理系统

    - 对于大量数据的操作,可以使用PreparedStatement的批处理功能,提高效率。 9. **优化** - 为了提高性能,可以考虑使用PreparedStatement代替Statement,因为预编译的SQL语句能减少解析时间。另外,合理设置...

    jdbc连接数据库的方式2

     6、在成批处理重复的插入或更新操作中使用PreparedStatement对象  如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有...

    制造大数据量java脚本

    - 在Java中,你可以使用循环结构(如`for`或`while`)来生成大量数据。这些数据可以是随机生成的,也可以遵循特定的模式。 - 使用`java.util.Random`类可以帮助我们生成随机数据,如整数、浮点数、字符串等。 4. ...

    JDBC 图片录入mysql库 完整版

    - 对于大数据量的图片,考虑分块读写,避免一次性加载大量数据导致内存溢出。 通过以上介绍,你应该对使用JDBC将图片录入MySQL数据库有了全面的理解。实际开发中,可以根据具体需求和项目规模,选择合适的数据存储...

    hibernate-batch-size-test:Hibernate hibernate.jdbc.batch_size 测试

    批量插入是提高数据库性能的有效手段,特别是在大量数据插入时。当设置`hibernate.jdbc.batch_size`时,Hibernate会将多个保存操作组合成一个批次,然后一次性提交到数据库,减少了数据库交互的次数,从而提升了整体...

Global site tag (gtag.js) - Google Analytics