[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错误.
分享到:
相关推荐
方立勋老师的JDBC笔记还会深入到JDBC的高级特性,如JDBC批处理、连接池的使用、JNDI数据源、以及JDBC的最新版本特性等,这些都是Java开发者必须掌握的技能。通过这些笔记的学习,读者将能够熟练地使用JDBC进行数据库...
首先,理解基本的JDBC批处理机制至关重要。在Java中,可以通过Statement对象或PreparedStatement对象使用批处理功能。批处理允许我们将多个SQL语句组合在一起,然后一次性提交到数据库,减少与数据库的交互次数,...
10. **JDBC批处理API**: Hibernate底层使用JDBC的批处理API(Statement.addBatch()和Statement.executeBatch()),用户也可以直接使用JDBC批处理,绕过Hibernate的部分逻辑,获取更高的性能。 11. **性能优化注意...
《amplecode:高性能JDBC批处理操作框架》 在当今的IT行业中,数据库操作是许多应用程序的核心部分。高效、稳定且灵活的数据处理框架对于提升应用性能至关重要。amplecode,一个开源项目,以其高性能的JDBC批处理...
5. **JDBC批处理**:对于大量相似的SQL语句,JDBC的批处理功能可以提高效率,减少网络传输和数据库处理的开销。 6. **PreparedStatement**:预编译的SQL语句,可以防止SQL注入攻击,并提供性能优化,尤其在重复执行...
同时它也包含了许多用于控制作业流程的特性,如重试机制、跳过机制、事务管理以及作业监听器等,这些特性都使得批处理作业更加灵活和可靠。 3. 事务管理 Spring Batch的事务管理是其核心特性之一。Spring Batch要求...
连接池是一种管理数据库连接的机制,可以提高性能并有效管理资源,例如C3P0或HikariCP。 3. **配置文件**: - `quartz.properties`:Quartz是一个开源作业调度框架,用于安排任务执行。这个文件可能包含Quartz的...
5. **错误处理和重试机制**:批处理过程中可能会遇到数据异常或其他错误,因此需要设计合理的错误处理策略,如记录错误信息、跳过错误记录或自动重试。 6. **事务管理**:批处理通常涉及到大量的数据库操作,因此...
例如,它可能支持更高级的并发性、更高效的批处理和更好的错误处理机制。同时,`sqljdbc4.jar`通常也包含了对更多SQL Server特性如存储过程、XML数据类型的支持。 使用这两个驱动程序时,开发者需要在Java代码中...
- **JDBC批处理**:通过设置批处理边界,一次性提交多条SQL语句,减少数据库交互次数。 - **Java 8 Stream API**:处理大量数据时,Stream API提供了一种高效且易读的编程方式。 6. **Batch.java文件可能的内容**...
10. **批处理**: Spring JDBC支持JDBC批处理,通过`JdbcTemplate`的`batchUpdate()`方法可以批量执行多条SQL更新语句,提高数据库操作效率。 11. **ErrorCodesSQLExceptionTranslator**: Spring JDBC提供了解析...
此外,对于大量数据的操作,考虑使用批处理,可以通过Statement的`addBatch()`和`executeBatch()`方法,一次提交多个SQL语句,提高效率。 总而言之,JDBC为Java开发者提供了强大的工具来与Oracle数据库进行交互,...
JDBC批处理 批处理允许一次发送多个SQL语句,提高性能。通过`addBatch()`添加SQL到批处理队列,最后调用`executeBatch()`执行。 ### 6. 数据源(DataSource) 数据源是JNDI(Java Naming and Directory ...
4. JDBC批处理: - 对于大量相似的SQL操作,使用PreparedStatement的addBatch()方法可以批量执行,提高性能。 - 批处理通过调用executeBatch()方法来一次性执行所有添加到批处理中的SQL语句。 5. 数据库连接池: ...
5. 内置错误处理机制,能够捕获和报告SQLServer相关的异常。 6. 支持SQLServer的高级特性,如XML类型、游标、存储过程等。 总结,sqljdbc41.jar作为SQLServer的JDBC驱动,是Java开发者与SQLServer数据库交互的重要...
为了解决普通插入操作的低效问题,JDBC引入了批处理机制。批处理允许将多个SQL语句打包成一个批次,一次性发送到数据库执行,大大减少了网络通信次数,从而显著提高了性能。在上述代码示例中,`test_mysql_batch()` ...
JDBC批处理 批处理允许一次提交多个SQL语句,提高性能。通过`Statement.addBatch()`添加SQL语句到批处理队列,然后使用`Statement.executeBatch()`执行整个批处理。 ### 5. JDBC性能优化 - 使用...
Oracle客户端JDBC连接测试工具是一种实用程序...了解JDBC基础和Oracle的JDBC驱动机制对使用和维护这类工具至关重要。如果工具的源码可用,开发者还可以借此提升自己的技能,定制适合自己项目的数据库连接测试解决方案。
- **JDBC批处理**:允许一次发送多个SQL语句,提高效率。 - **分布式事务**:支持X/Open XA接口,可以参与全局事务。 - **性能优化**:通过预编译的SQL语句和连接池,提升数据库操作的速度。 - **错误和异常处理**:...
此外,驱动还提供了异常处理机制,如`SQLServerException`,用于捕获和处理在与SQL Server交互过程中可能出现的错误。 总的来说,"sqljdbc4-4.0.jar"是Java开发者连接和操作SQL Server数据库的重要工具,它提供了...