`
JavaStudyEye
  • 浏览: 80613 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转) jdbc批量插入

阅读更多
2009-05-21  
使用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 + 批处理)性能更优。 
分享到:
评论

相关推荐

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

    本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database Connectivity)是Java平台中用于与数据库交互的一种规范,它允许程序员使用SQL语句直接操作数据库...

    JDBC批量插入 更新 删除等操作

    #### 一、JDBC批量插入 JDBC(Java Database Connectivity)是Java平台中用来标准地连接数据库的技术。通过JDBC,Java应用程序可以与多种类型的数据库进行交互,实现数据的读取、写入等功能。批量操作是指在一次...

    jdbc批量插入大字段

    因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...

    jdbc-批量插入数据

    本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...

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

    本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好地理解和选择适合的批量处理方式。 1. **使用PreparedStatement的addBatch()和executeBatch()** JDBC提供了...

    java实现jdbc批量插入数据

    本篇文章将详细介绍如何使用Java实现JDBC批量插入数据,并比较三种常见的JDBC批量插入编程方法。 **方法一:使用PreparedStatement加批量的方法** PreparedStatement是Statement的子接口,允许预编译SQL语句,这...

    JDBC连接MySQL数据库批量插入数据过程详解

    "JDBC连接MySQL数据库批量插入数据过程详解" 本文主要介绍了使用JDBC连接MySQL数据库批量插入数据的过程详解,通过示例代码详细介绍了批量插入数据的步骤,对大家的学习或者工作具有一定的参考学习价值。 一、JDBC...

    Java-JDBC【源码】批量插入操作、优化取消自动提交(提速40+倍)

    文章地址:...Java-JDBC【之】批量插入操作、优化取消自动提交(提速40+倍) 1.JDBC批量操作 2.两种实现方式 3.优化,取消自动提交 4.完整源码 《目录:Java-JDBC学习(编写中...)》 《幕》

    jdbc批量 (绝对经典)

    ### JDBC批量操作详解:效率与性能的提升策略 在数据库操作中,批量处理是一种常见的优化技术,用于提高数据处理的效率和性能。JDBC(Java Database Connectivity)作为Java应用程序与数据库交互的标准API,提供了...

    Mybatis 3+Mysql 实现批量插入

    在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...

    Hibernate+JDBC实现批量插入、更新及删除的方法详解

    知识点四:JDBC批量插入 * 使用JDBC进行批量插入,可以通过PreparedStatement的addBatch()方法来实现批量插入。 知识点五:Hibernate+JDBC实现批量更新 * 使用Hibernate+JDBC可以实现批量更新,通过使用Hibernate...

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

    通过上述分析可知,JDBC批量插入相比于逐条插入具有显著的性能优势。特别是在处理大量数据时,批量插入能够显著提升数据处理的效率。同时,合理的批量大小设置对于充分发挥批量插入的优势至关重要。在实际项目开发中...

    spring jdbc Templatetest 访问mysql数据库,批量插入数据

    本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...

    Java实现mybatis批量插入数据到Oracle

    本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...

    java代码oracle数据库批量插入

    这段Java代码通过JDBC实现了向Oracle数据库批量插入数据的功能。关键步骤包括:建立数据库连接、准备SQL语句、批量添加SQL语句到批处理队列、执行批处理以及事务提交。这种方式相比于逐条插入数据,可以显著提升插入...

    oracle数据库中批量插入问题

    2. **使用PL/SQL或外部编程语言(如C#、Java等)**:通过编程接口(如ODBC、JDBC、Oracle Data Provider for .NET等)进行批量插入操作。这种方式更灵活,可以适应更复杂的数据处理需求。 ### C#代码示例解析 提供...

    批量插入大量数据

    在实际操作中,你可能需要结合具体的技术栈,例如Python的pandas库配合SQLAlchemy,Java的JDBC,或者是Node.js的Sequelize等,使用它们提供的批量插入接口。同时,要关注数据库类型,如MySQL、PostgreSQL、Oracle或...

    Hive几种数据导入方式

    在创建表的同时,也可以通过查询的方式直接向表中插入数据。这种方式通常用于初始数据的填充。 **示例**: ```sql CREATE TABLE new_table AS SELECT * FROM existing_table WHERE condition; ``` 这种方式结合了...

    dbutils + oracle 增删改查批量插入示例

    总的来说,`dbutils + oracle 增删改查批量插入示例`是一个很好的学习资源,它帮助开发者掌握如何在Java项目中有效地进行数据库操作,尤其是在处理大数据量时,批量插入的优势尤为明显。通过理解和实践这个示例,...

    SpringBoot整合Mybatis连接SQL Server 跨库批量插入

    本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...

Global site tag (gtag.js) - Google Analytics