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 });
}
分享到:
相关推荐
此外,Spring JDBC也支持存储过程的调用,以及批量更新操作。在处理大量数据时,还可以通过分页查询来优化性能。在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个...
Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一种抽象层,使得开发者可以更轻松地处理数据库操作。Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于...
在Spring框架中,JDBC操作被封装在`org.springframework.jdbc.core.JdbcTemplate`类中,它提供了一种简洁、异常安全的方式来执行SQL查询和更新。JdbcTemplate通过模板方法模式简化了事务管理、异常处理和结果集的...
Spring-JDBC是Spring框架的一部分,它提供了一个统一的接口来处理数据库操作,简化了与Java Database Connectivity (JDBC) API的交互。这个框架的核心目标是减少编写繁琐的JDBC代码,提高可测试性和可维护性。Spring...
"spring封装jdbc查询"是Spring框架中的一个核心功能,旨在简化传统的JDBC(Java Database Connectivity)操作,提高代码的可读性和可维护性,同时减少数据库操作中的潜在错误。以下是对这个主题的详细阐述: 首先,...
本文将深入探讨如何将Spring框架与JDBC进行整合,以便更高效、更简洁地处理数据库操作。 首先,我们来看Spring中的JDBC支持。Spring提供了JdbcTemplate和NamedParameterJdbcTemplate两个核心类,它们是对JDBC的抽象...
在压缩包中的"复件 SpringJDBC"文件可能包含一个简单的Spring整合JDBC的示例。代码可能包括了配置文件、实体类、DAO接口和其实现。例如,创建一个UserDao接口,使用JdbcTemplate进行用户查询: ```java public ...
通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...
- **批处理**: Spring JDBC支持JDBC的批处理功能,可以批量执行多条SQL语句,提高数据库操作效率。 - **存储过程**: 可以方便地调用数据库中的存储过程,并处理其返回的结果集。 **5. 结果集处理** Spring JDBC...
10. **批处理**: Spring JDBC支持JDBC批处理,通过`JdbcTemplate`的`batchUpdate()`方法可以批量执行多条SQL更新语句,提高数据库操作效率。 11. **ErrorCodesSQLExceptionTranslator**: Spring JDBC提供了解析...
Spring JDBC提供了`batchUpdate()`方法支持批量SQL执行,提高性能。 七、命名参数 `NamedParameterJdbcTemplate`类允许使用命名参数而不是传统的问号占位符,使SQL更易读,例如: ```java Map, Object> params = ...
本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...
Spring对Java数据库连接(JDBC)的支持是通过其Spring JDBC模块来实现的,该模块提供了一组JDBC相关的抽象以及数据访问模板,使得开发者可以更加便捷地使用JDBC进行数据库操作。 JdbcTemplate是Spring JDBC模块中...
5. **批处理操作**:对于大量数据的插入、更新和删除,Spring4提供了JdbcBatchUpdateException和JdbcBatchUpdateUtils,以支持高效、批量的数据库操作。 6. **连接池集成**:Spring支持多种连接池,如C3P0、...
1. **Spring JDBC模块**:Spring JDBC是Spring框架的一部分,它简化了传统的JDBC编程模型,通过提供模板类(如JdbcTemplate)和数据访问对象(DAO)支持,使数据库操作变得更为简洁和易于管理。 2. **JdbcTemplate*...
在Java开发中,Spring JDBC是Spring...总的来说,Spring JDBC提供了强大的批量处理能力,通过`NamedParameterJdbcTemplate`的`batchUpdate`方法,我们可以轻松地实现数据的批量插入和更新,有效提升数据库操作的效率。
Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得开发者可以更方便地使用Java数据库连接(JDBC)来操作数据库。在这个实例源码中,我们看到的是一个基于`epet`宠物项目的完整实现,该项目可能包括了创建...
总之,Spring Framework的JDBC模块通过 `JdbcTemplate` 提供了一种方便、安全的方式来处理数据库操作,减少了手动处理JDBC代码的麻烦,提高了开发效率。结合Spring的其他特性,如依赖注入和AOP,可以构建出高度模块...
JdbcTemplate是Spring为JDBC提供的一种抽象,它简化了数据库操作。例如,执行插入操作时,我们可以使用JdbcTemplate的update()方法,它会自动处理预编译的SQL语句,并且如果需要返回主键,可以使用PreparedStatement...
JSF可以设计界面供用户上传文件,Spring和JDBC则负责读取文件内容并批量插入数据库。反之,导出数据时,Spring可以从数据库中检索数据,然后生成CSV或Excel文件供用户下载。 6. **日志**:为了追踪和调试应用程序,...