`
coolxing
  • 浏览: 873796 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:97159
社区版块
存档分类
最新评论

JDBC的批处理机制

    博客分类:
  • JDBC
阅读更多

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.] 

 

需要向数据库发送多条sql语句时, 为了提升执行效率, 可以考虑采用JDBC的批处理机制. JDBC的批处理机制主要涉及Statement或PreparedStatement对象的以下方法:

|--addBatch(String sql) :Statement类的方法, 多次调用该方法可以将多条sql语句添加到Statement对象的命令列表中. 执行批处理时将一次性的把这些sql语句发送给数据库进行处理.

|--addBatch(): PreparedStatement类的方法, 多次调用该方法可以将多条预编译的sql语句添加到PreparedStatement对象的命令列表中. 执行批处理时将一次性的把这些sql语句发送给数据库进行处理.

|--executeBatch():把Statement对象或PreparedStatement对象命令列表中的所有sql语句发送给数据库进行处理.

|--clearBatch():  清空当前sql命令列表.

 

 

/*
 * create table batch_test(id int primary key auto_increment, name varchar(40), age int);
 */
public class BatchTest {
	@Test
	public void statementBatch() {
		Connection conn = null;
		Statement st = null;
		String sql_1 = "insert into batch_test(name, age) values('coolxing', 24)";
		String sql_2 = "insert into batch_test(name, age) values('coolmin', 22)";
		String sql_3 = "insert into batch_test(name, age) values('yong', 21)";
		String sql_4 = "update batch_test set name='java' where id=1";

		try {
			conn = JdbcUtils.getConnection();
			st = conn.createStatement();
			st.addBatch(sql_1);
			st.addBatch(sql_2);
			st.addBatch(sql_3);
			st.addBatch(sql_4);
			st.executeBatch();
			st.clearBatch();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, st, conn);
		}
	}

	@Test
	public void preparedStatementBatch() {
		Connection conn = null;
		PreparedStatement st = null;
		String sql = "insert into batch_test(name, age) values(?, ?)";

		try {
			conn = JdbcUtils.getConnection();
			st = conn.prepareStatement(sql);
			for (int i = 0; i < 10002; i++) {
				st.setString(1, "coolxing_" + i);
				st.setInt(2, i);
				st.addBatch();
				// 需要防止Preparedstatement对象中的命令列表包含过多的待处理sql语句, 而造成outOfMemory错误
				if (i % 500 == 0) {
					st.executeBatch();
					st.clearBatch();
				}
			}
			// 将剩下的未处理命令发送给数据库
			st.executeBatch();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, st, conn);
		}
	}
}

 

 

总结: 采用Statement.addBatch(sql)方式实现批处理可以向数据库发送不同类型的sql语句, 但是这些sql语句没有进行预编译, 执行效率不高. 且需要列出每一个sql语句. 而PreparedStatement.addBatch()只能应用在类型相同参数不同的sql语句中, 此种形式的批处理经常用于在同一个表中批量插入数据, 或批量更新表的数据.

注意不要一次性向命令列表中添加数量过多的sql语句, 防止出现outOfMemory错误.

1
3
分享到:
评论

相关推荐

    JDBC笔记 方立勋

    方立勋老师的JDBC笔记还会深入到JDBC的高级特性,如JDBC批处理、连接池的使用、JNDI数据源、以及JDBC的最新版本特性等,这些都是Java开发者必须掌握的技能。通过这些笔记的学习,读者将能够熟练地使用JDBC进行数据库...

    5、批量插入海量数据之Java插入MySql(csdn)————程序.pdf

    首先,理解基本的JDBC批处理机制至关重要。在Java中,可以通过Statement对象或PreparedStatement对象使用批处理功能。批处理允许我们将多个SQL语句组合在一起,然后一次性提交到数据库,减少与数据库的交互次数,...

    关于hibernate的批处理

    10. **JDBC批处理API**: Hibernate底层使用JDBC的批处理API(Statement.addBatch()和Statement.executeBatch()),用户也可以直接使用JDBC批处理,绕过Hibernate的部分逻辑,获取更高的性能。 11. **性能优化注意...

    smoke-tests-conf-0.2.0-incubating.zip

    《amplecode:高性能JDBC批处理操作框架》 在当今的IT行业中,数据库操作是许多应用程序的核心部分。高效、稳定且灵活的数据处理框架对于提升应用性能至关重要。amplecode,一个开源项目,以其高性能的JDBC批处理...

    openGauss-1.1.0-JDBC.tar.gz

    5. **JDBC批处理**:对于大量相似的SQL语句,JDBC的批处理功能可以提高效率,减少网络传输和数据库处理的开销。 6. **PreparedStatement**:预编译的SQL语句,可以防止SQL注入攻击,并提供性能优化,尤其在重复执行...

    Spring Batch批处理框架

    同时它也包含了许多用于控制作业流程的特性,如重试机制、跳过机制、事务管理以及作业监听器等,这些特性都使得批处理作业更加灵活和可靠。 3. 事务管理 Spring Batch的事务管理是其核心特性之一。Spring Batch要求...

    Java用JDBC实现对Oracle数据库操作

    连接池是一种管理数据库连接的机制,可以提高性能并有效管理资源,例如C3P0或HikariCP。 3. **配置文件**: - `quartz.properties`:Quartz是一个开源作业调度框架,用于安排任务执行。这个文件可能包含Quartz的...

    java批处理

    5. **错误处理和重试机制**:批处理过程中可能会遇到数据异常或其他错误,因此需要设计合理的错误处理策略,如记录错误信息、跳过错误记录或自动重试。 6. **事务管理**:批处理通常涉及到大量的数据库操作,因此...

    sqlserver2000-jdbc2.0驱动

    例如,它可能支持更高级的并发性、更高效的批处理和更好的错误处理机制。同时,`sqljdbc4.jar`通常也包含了对更多SQL Server特性如存储过程、XML数据类型的支持。 使用这两个驱动程序时,开发者需要在Java代码中...

    java 批处理的资源

    - **JDBC批处理**:通过设置批处理边界,一次性提交多条SQL语句,减少数据库交互次数。 - **Java 8 Stream API**:处理大量数据时,Stream API提供了一种高效且易读的编程方式。 6. **Batch.java文件可能的内容**...

    spring_jdbc

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

    JDBC实现Oracle数据库的增删改查

    此外,对于大量数据的操作,考虑使用批处理,可以通过Statement的`addBatch()`和`executeBatch()`方法,一次提交多个SQL语句,提高效率。 总而言之,JDBC为Java开发者提供了强大的工具来与Oracle数据库进行交互,...

    JDBC入门中文文档

    JDBC批处理 批处理允许一次发送多个SQL语句,提高性能。通过`addBatch()`添加SQL到批处理队列,最后调用`executeBatch()`执行。 ### 6. 数据源(DataSource) 数据源是JNDI(Java Naming and Directory ...

    Java—JDBC资料汇总

    4. JDBC批处理: - 对于大量相似的SQL操作,使用PreparedStatement的addBatch()方法可以批量执行,提高性能。 - 批处理通过调用executeBatch()方法来一次性执行所有添加到批处理中的SQL语句。 5. 数据库连接池: ...

    sqljdbc41.jar

    5. 内置错误处理机制,能够捕获和报告SQLServer相关的异常。 6. 支持SQLServer的高级特性,如XML类型、游标、存储过程等。 总结,sqljdbc41.jar作为SQLServer的JDBC驱动,是Java开发者与SQLServer数据库交互的重要...

    jdbc批量 (绝对经典)

    为了解决普通插入操作的低效问题,JDBC引入了批处理机制。批处理允许将多个SQL语句打包成一个批次,一次性发送到数据库执行,大大减少了网络通信次数,从而显著提高了性能。在上述代码示例中,`test_mysql_batch()` ...

    jdbc技术介绍

    JDBC批处理 批处理允许一次提交多个SQL语句,提高性能。通过`Statement.addBatch()`添加SQL语句到批处理队列,然后使用`Statement.executeBatch()`执行整个批处理。 ### 5. JDBC性能优化 - 使用...

    Oracle 客户端JDBC连接测试工具

    Oracle客户端JDBC连接测试工具是一种实用程序...了解JDBC基础和Oracle的JDBC驱动机制对使用和维护这类工具至关重要。如果工具的源码可用,开发者还可以借此提升自己的技能,定制适合自己项目的数据库连接测试解决方案。

    Microsoft SQL Server JDBC Driver 2.0.rar

    - **JDBC批处理**:允许一次发送多个SQL语句,提高效率。 - **分布式事务**:支持X/Open XA接口,可以参与全局事务。 - **性能优化**:通过预编译的SQL语句和连接池,提升数据库操作的速度。 - **错误和异常处理**:...

    sqljdbc4-4.0.jar

    此外,驱动还提供了异常处理机制,如`SQLServerException`,用于捕获和处理在与SQL Server交互过程中可能出现的错误。 总的来说,"sqljdbc4-4.0.jar"是Java开发者连接和操作SQL Server数据库的重要工具,它提供了...

Global site tag (gtag.js) - Google Analytics