`

JDBC 批量插入

    博客分类:
  • Java
阅读更多

使用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();     
    
    }     
    
   }     
   // 执行不能被1000求余的SQL
   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(Java Database Connectivity)是Java平台中用来标准地连接数据库的技术。通过JDBC,Java应用程序可以与多种类型的数据库进行交互,实现数据的读取、写入等功能。批量操作是指在一次...

    jdbc批量插入大字段

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

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

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

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

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

    java实现jdbc批量插入数据

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

    jdbc-批量插入数据

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

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

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

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

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

    Hive几种数据导入方式

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

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

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

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

    本文将详细讲解如何使用JDBC批量插入10万条数据,并探讨其背后的原理和优化策略。 批量处理在JDBC中主要通过Statement对象的`addBatch()`和`executeBatch()`两个方法实现。在示例代码中,我们创建了一个`...

    利用poi获取excel数据批量插入大量数据到mysql

    总结,本教程介绍了如何使用Apache POI读取Excel数据并借助JDBC批量插入到MySQL数据库的方法。这种方法适用于需要从Excel数据源导入大量数据到关系型数据库的场景,能够有效地提高数据处理的效率。在实际应用中,...

    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框架...

    SpringJDBC批量处理数据代码示例

    在Java开发中,Spring JDBC是Spring...总的来说,Spring JDBC提供了强大的批量处理能力,通过`NamedParameterJdbcTemplate`的`batchUpdate`方法,我们可以轻松地实现数据的批量插入和更新,有效提升数据库操作的效率。

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

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

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

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

    MSSQL批量插入数据优化详细

    在SQL Server中,批量插入数据是一项重要的性能优化技术,尤其当需要处理大量数据时。本文将探讨如何在MSSQL中高效地批量插入数据,并针对给出的代码示例进行分析和优化。 首先,我们来看一个常见的批量插入方法,...

    java代码oracle数据库批量插入

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

Global site tag (gtag.js) - Google Analytics