`
学会做人
  • 浏览: 121022 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用JDBC插入大量数据的性能测试

阅读更多

使用jdbc向数据库插入100000条记录,分别使用statementPreparedStatement,及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){//可以设置不同的大小;如501005001000等等

     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 + 批处理)性能更优。

 

分享到:
评论

相关推荐

    软件测试中使用JDBC插入大量数据的性能测试

    jdbc数据软件测试中使用JDBC插入大量数据的性能测试使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试:1、使用statement插入100000条记录...

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

    通过这样的性能测试,我们可以了解到在特定场景下,Mybatis和JDBC哪个更适合批量插入操作。通常,Mybatis由于其封装和优化,可能会在易用性和性能之间取得更好的平衡。但具体选择应根据项目需求和实际环境进行权衡。...

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

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

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

    这种方式简单易实现,但当需要插入大量数据时,其性能会明显下降。 - **批量插入**:指一次性提交多条插入语句。这种方法可以显著提高数据插入的效率,尤其是在处理大量数据时。 #### 三、示例代码分析 本节将详细...

    三种JDBC批量插入编程方法的比较

    在`JDBCBatchInsertTest.java`中,你可能会看到对这些批量插入方法的性能测试,通过计时和比较来确定哪种方法更适合特定的场景。 总结来说,选择JDBC批量插入方法应基于数据插入的特性和需求。PreparedStatement...

    jdbc连接数据库的方式2

    三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能(系转载)。  1、在客户端软件开发中使用Thin驱动程序  在开发Java软件方面,Oracle...

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

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

    使用JDBC4.0操作Oracle中BLOB类型的数据方法

    以下是对使用JDBC4.0操作Oracle中BLOB类型数据的详细步骤: 首先,你需要在项目中引入Oracle JDBC驱动ojdbc6.jar,这是一个连接Oracle数据库的必备库。你可以在项目的类路径中添加这个jar包,通常将其放在/META-INF...

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

    实验设计了多个程序来测试1000次插入操作到测试性能表TESTXXXPERF中的性能表现。这些实验分别使用OCI驱动和Thin驱动进行,以观察两者之间的性能差距。 ##### 1. 自动提交模式的影响 自动提交模式是指每次执行更新...

    利用itext操作pdf从数据库导出大量数据

    “testpdf”可能是用于测试生成的PDF文件,而“pfd大量数据的表格及水印.docx”可能是详细的操作步骤或结果展示,包含了如何使用iText处理大量数据和添加水印的具体步骤。 通过以上步骤,我们可以高效地利用iText...

    jmeter的JDBC测试

    3. 插入/更新/删除性能测试:执行DML语句,分析数据库处理这些操作的速度和资源消耗。 4. 存储过程调用:测试存储过程的执行效率,特别是那些涉及大量数据处理的存储过程。 5. 并发测试:模拟多个用户同时访问...

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

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

    JDBC 图片录入mysql库 完整版

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

    PI 实时数据库 JDBC 说明文档

    1. **数据分析**:PI实时数据库的强项在于处理大量实时数据,用于监控生产过程、设备状态和性能指标。 2. **报警和事件管理**:通过JDBC或OLEDB,可以设置实时报警和事件触发,实现自动化响应。 3. **数据集成**:与...

    性能测试及技术

    在这个场景中,我们关注的是如何将文本文件中的数据通过datagrid读取并有效插入到Oracle数据库中,以及如何进行性能测试。 首先,对于数据的读取,我们可以使用多种编程语言,如Java、Python或C#,它们都有强大的库...

    springjdbc使用及mybatis-generator

    通过使用JdbcTemplate,开发者可以避免编写大量重复的JDBC模板代码,例如建立连接、设置参数、处理结果集等。 2. **配置连接池**:在实际应用中,为了提高数据库访问性能和资源利用率,通常会使用连接池,如...

    eclipse jdbc

    在Struts中,JDBC通常用于处理数据库交互,如数据查询、插入、更新和删除。有了对应的JDBC驱动,开发者可以在Eclipse中创建基于Struts的项目,并无缝连接到多种数据库。 Spring框架是另一个全面的Java企业级应用...

    csvjdbc-r0-10导入示例工程

    对于大量数据导入,批处理能显著提高效率。使用`addBatch()`和`executeBatch()`方法可以一次性提交多条插入语句,减少数据库交互次数。 6. **异常处理与关闭资源**: 在导入过程中,需要捕获可能的SQLException并...

Global site tag (gtag.js) - Google Analytics