`

spring之JDBC批量操作

阅读更多
spring之JDBC批量操作
      jdbcTemplate.batchUpdate(final String[] sql) ,API解释:Issue multiple SQL updates on a single JDBC Statement using batching,翻译过来大致为:解决多个sql的插入、更新、删除操作在一个Statement中。性能一般。
   jdbcTemplate.batchUpdate(String sql, final BatchPreparedStatementSetter pss),类似于JDBC的PreparedStatement,性能较上着有所提高。
   我们举例说明如何使用,示例如下:
final int count = 2000;  
    final List<String> firstNames = new ArrayList<String>(count);  
    final List<String> lastNames = new ArrayList<String>(count);  
    for (int i = 0; i < count; i++) {  
      firstNames.add("First Name " + i);  
      lastNames.add("Last Name " + i);  
    }  
    jdbcTemplate.batchUpdate(  
            "insert into customer (id, first_name, last_name, last_login, comments) values (?, ?, ?, ?, ?)",  
            new BatchPreparedStatementSetter() {  
           //为prepared statement设置参数。这个方法将在整个过程中被调用的次数  
        public void setValues(PreparedStatement ps, int i) throws SQLException {  
                ps.setLong(1, i + 10);  
                ps.setString(2, firstNames.get(i));  
                ps.setString(3, lastNames.get(i));  
                ps.setNull(4, Types.TIMESTAMP);  
                ps.setNull(5, Types.CLOB);  
              }  
              //返回更新的结果集条数  
          public int getBatchSize() {  
                   return count;  
              }  
            });  
  }  
final int count = 2000;
    final List<String> firstNames = new ArrayList<String>(count);
    final List<String> lastNames = new ArrayList<String>(count);
    for (int i = 0; i < count; i++) {
      firstNames.add("First Name " + i);
      lastNames.add("Last Name " + i);
    }
    jdbcTemplate.batchUpdate(
            "insert into customer (id, first_name, last_name, last_login, comments) values (?, ?, ?, ?, ?)",
            new BatchPreparedStatementSetter() {
           //为prepared statement设置参数。这个方法将在整个过程中被调用的次数
        public void setValues(PreparedStatement ps, int i) throws SQLException {
                ps.setLong(1, i + 10);
                ps.setString(2, firstNames.get(i));
                ps.setString(3, lastNames.get(i));
                ps.setNull(4, Types.TIMESTAMP);
                ps.setNull(5, Types.CLOB);
              }
              //返回更新的结果集条数
          public int getBatchSize() {
                   return count;
              }
            });
  }
 

  BatchSqlUpdate类是SqlUpdate 的子类,适用于插入、删除、更新批量操作,内部使用PreparedStatement,所以效率很高,批量语句达到设定的batchSize,或者手动调用flush才会执行批量操作。注意:此类是非线程安全的,必须为每个使用者创建一个实例,或者在同一个线程中使用前调用reset。
   下面我们举例说明如何使用BatchSqlUpdate,来执行批量操作。示例如下:
class BatchInsert extends BatchSqlUpdate {  
  private static final String SQL = "insert into t_customer (id, first_name, last_name, last_login, "  
      + "comments) values (?, ?, ?, ?, null)";  
  
  BatchInsert(DataSource dataSource) {  
    super(dataSource, SQL);  
    declareParameter(new SqlParameter(Types.INTEGER));  
    declareParameter(new SqlParameter(Types.VARCHAR));  
    declareParameter(new SqlParameter(Types.VARCHAR));  
    declareParameter(new SqlParameter(Types.TIMESTAMP));  
  
    setBatchSize(10);  
  }  
  
}  
class BatchInsert extends BatchSqlUpdate {
  private static final String SQL = "insert into t_customer (id, first_name, last_name, last_login, "
      + "comments) values (?, ?, ?, ?, null)";
  BatchInsert(DataSource dataSource) {
    super(dataSource, SQL);
    declareParameter(new SqlParameter(Types.INTEGER));
    declareParameter(new SqlParameter(Types.VARCHAR));
    declareParameter(new SqlParameter(Types.VARCHAR));
    declareParameter(new SqlParameter(Types.TIMESTAMP));
    setBatchSize(10);
  }
}
 
int count = 5000;  
    for (int i = 0; i < count; i++) {  
      batchInsert.update(new Object[] { i + 100L, "a" + i, "b" + i, null });  
    }  
int count = 5000;
    for (int i = 0; i < count; i++) {
      batchInsert.update(new Object[] { i + 100L, "a" + i, "b" + i, null });
    }
0
0
分享到:
评论

相关推荐

    spring_JDBC整合包

    此外,Spring JDBC也支持存储过程的调用,以及批量更新操作。在处理大量数据时,还可以通过分页查询来优化性能。在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一种抽象层,使得开发者可以更轻松地处理数据库操作。Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于...

    Spring+JDBC实例

    在Spring框架中,JDBC操作被封装在`org.springframework.jdbc.core.JdbcTemplate`类中,它提供了一种简洁、异常安全的方式来执行SQL查询和更新。JdbcTemplate通过模板方法模式简化了事务管理、异常处理和结果集的...

    Spring-JDBC,带一小例子

    Spring-JDBC是Spring框架的一部分,它提供了一个统一的接口来处理数据库操作,简化了与Java Database Connectivity (JDBC) API的交互。这个框架的核心目标是减少编写繁琐的JDBC代码,提高可测试性和可维护性。Spring...

    spring封装jdbc查询

    "spring封装jdbc查询"是Spring框架中的一个核心功能,旨在简化传统的JDBC(Java Database Connectivity)操作,提高代码的可读性和可维护性,同时减少数据库操作中的潜在错误。以下是对这个主题的详细阐述: 首先,...

    Spring与JDBC整合

    本文将深入探讨如何将Spring框架与JDBC进行整合,以便更高效、更简洁地处理数据库操作。 首先,我们来看Spring中的JDBC支持。Spring提供了JdbcTemplate和NamedParameterJdbcTemplate两个核心类,它们是对JDBC的抽象...

    spring 整合JDBC 原创代码

    在压缩包中的"复件 SpringJDBC"文件可能包含一个简单的Spring整合JDBC的示例。代码可能包括了配置文件、实体类、DAO接口和其实现。例如,创建一个UserDao接口,使用JdbcTemplate进行用户查询: ```java public ...

    SpringJDBC.rar_SpringJDBC_spring jdbc

    通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...

    Springjdbc

    - **批处理**: Spring JDBC支持JDBC的批处理功能,可以批量执行多条SQL语句,提高数据库操作效率。 - **存储过程**: 可以方便地调用数据库中的存储过程,并处理其返回的结果集。 **5. 结果集处理** Spring JDBC...

    spring_jdbc

    10. **批处理**: Spring JDBC支持JDBC批处理,通过`JdbcTemplate`的`batchUpdate()`方法可以批量执行多条SQL更新语句,提高数据库操作效率。 11. **ErrorCodesSQLExceptionTranslator**: Spring JDBC提供了解析...

    Spring JDBC 增删改查

    Spring JDBC提供了`batchUpdate()`方法支持批量SQL执行,提高性能。 七、命名参数 `NamedParameterJdbcTemplate`类允许使用命名参数而不是传统的问号占位符,使SQL更易读,例如: ```java Map, Object&gt; params = ...

    hualinux spring 3.16:Spring对JDBC的支持.pdf

    Spring对Java数据库连接(JDBC)的支持是通过其Spring JDBC模块来实现的,该模块提供了一组JDBC相关的抽象以及数据访问模板,使得开发者可以更加便捷地使用JDBC进行数据库操作。 JdbcTemplate是Spring JDBC模块中...

    第十一章 Spring4 JDBC

    5. **批处理操作**:对于大量数据的插入、更新和删除,Spring4提供了JdbcBatchUpdateException和JdbcBatchUpdateUtils,以支持高效、批量的数据库操作。 6. **连接池集成**:Spring支持多种连接池,如C3P0、...

    基于Spring-jdbc-update、query方法操作数据库

    1. **Spring JDBC模块**:Spring JDBC是Spring框架的一部分,它简化了传统的JDBC编程模型,通过提供模板类(如JdbcTemplate)和数据访问对象(DAO)支持,使数据库操作变得更为简洁和易于管理。 2. **JdbcTemplate*...

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

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

    SpringJDBC批量处理数据代码示例

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

    spring jdbc 实例源码

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得开发者可以更方便地使用Java数据库连接(JDBC)来操作数据库。在这个实例源码中,我们看到的是一个基于`epet`宠物项目的完整实现,该项目可能包括了创建...

    spring famework 操作数据库使用jdbc示例代码

    总之,Spring Framework的JDBC模块通过 `JdbcTemplate` 提供了一种方便、安全的方式来处理数据库操作,减少了手动处理JDBC代码的麻烦,提高了开发效率。结合Spring的其他特性,如依赖注入和AOP,可以构建出高度模块...

    spring整合jdbc学习资料

    JdbcTemplate是Spring为JDBC提供的一种抽象,它简化了数据库操作。例如,执行插入操作时,我们可以使用JdbcTemplate的update()方法,它会自动处理预编译的SQL语句,并且如果需要返回主键,可以使用PreparedStatement...

    jsf +jdbc+spring实现的增设改查,分页,导入数据。导出数据、日志

    JSF可以设计界面供用户上传文件,Spring和JDBC则负责读取文件内容并批量插入数据库。反之,导出数据时,Spring可以从数据库中检索数据,然后生成CSV或Excel文件供用户下载。 6. **日志**:为了追踪和调试应用程序,...

Global site tag (gtag.js) - Google Analytics