/**
* 预编译+批处理模式更新数据
* */
@SuppressWarnings("deprecation")
private boolean batchExecuteInsertTest(){
boolean isok = true;
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Connection conn=null;//连接
PreparedStatement pstm=null; //预编译语句
String pstmSql = null;
Savepoint sp = null;
try {
conn = session.connection();
conn.setAutoCommit(false); // 设置不自动提交
sp = conn.setSavepoint();//设置回滚点
pstmSql = "insert into test(id,name) values (?,?)";
pstm = conn.prepareStatement(pstmSql);
int recordNum = 1; // 计数器
int commit_size = 2;// 每次提交记录数2
pstm.setString(1, "5");//
pstm.setString(2, "5——列数据");
pstm.addBatch();
int total = 5;
//循环队列
for (int i = 1; i <= total; i++) {
recordNum++; // 计数
pstm.setString(1, i+"");//
pstm.setString(2, i+"列数据");//
pstm.addBatch();
// 每1000次提交一次
if (recordNum % commit_size == 0) {// 可以设置不同的大小;如50,100,500,1000等等
pstm.executeBatch();
conn.commit();
pstm.clearBatch();
conn.setAutoCommit(false);
pstm = conn.prepareStatement(pstmSql);
}
}
if (recordNum % commit_size != 0) { //执行剩余的批处理
pstm.executeBatch();
conn.commit();
}
} catch (Exception e) {
isok = false;
e.printStackTrace();
try {
if (conn != null) { // 回滚事务
conn.rollback(sp);//回滚到那个事务点上去
conn.commit();
}
} catch(Exception e2){
}
}finally{
try {
if (pstm != null) {
pstm.close();
pstm = null;
}
if (conn != null) {
conn.close();
conn = null;
}
if (session != null) {
session.close();
session = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return isok;
}
我设置2条记录进行提交,当执行到第6条语句时,由于主键唯一性,无法执行。却没有事务回滚,不知道怎么回事?希望各位高手指点!
分享到:
相关推荐
本文将详细阐述JDBC批处理的基本概念、优势以及如何在实际应用中使用。 一、批处理的概念 批处理是指一次性提交多个SQL语句到数据库进行执行,而不是逐个发送和执行。在JDBC中,批处理主要通过Statement或...
方立勋老师的JDBC笔记还会深入到JDBC的高级特性,如JDBC批处理、连接池的使用、JNDI数据源、以及JDBC的最新版本特性等,这些都是Java开发者必须掌握的技能。通过这些笔记的学习,读者将能够熟练地使用JDBC进行数据库...
**JDBC批处理详解** 在Java数据库连接(Java Database Connectivity, JDBC)中,批处理是一项重要的功能,它允许开发者一次性提交多个SQL语句,从而提高数据处理的效率和性能。批处理是数据库操作中的优化手段,...
在JDBC中,`Connection`对象提供了事务管理的方法,如`setAutoCommit(false)`关闭自动提交,`commit()`提交事务,`rollback()`回滚事务。 - **事务的四大特性(ACID)**:原子性(Atomicity)、一致性(Consistency...
我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的...
《amplecode:高性能JDBC批处理操作框架》 在当今的IT行业中,数据库操作是许多应用程序的核心部分。高效、稳定且灵活的数据处理框架对于提升应用性能至关重要。amplecode,一个开源项目,以其高性能的JDBC批处理...
JDBC批处理 批处理可以提高性能,通过批量执行多条SQL语句。可以使用Statement对象的`addBatch()`方法添加SQL语句到批处理队列,然后通过`executeBatch()`执行。 ### 6. JDBC性能优化 - 使用PreparedStatement...
5. **JDBC批处理**:对于大量相似的SQL语句,JDBC的批处理功能可以提高效率,减少网络传输和数据库处理的开销。 6. **PreparedStatement**:预编译的SQL语句,可以防止SQL注入攻击,并提供性能优化,尤其在重复执行...
**JDBC批处理操作** 批处理是提高数据库操作性能的一种方式,通过一次性提交多条SQL语句,减少了网络通信和数据库处理的开销。以下是使用Statement和PreparedStatement对象进行批处理的基本步骤: 1. **使用...
- 批量操作数据库:利用JDBC批处理功能优化数据库操作性能。 - Job多个Step的执行:Job可以包含多个Step,根据需要组合执行。 - 条件流程和流程决策:使用Flow和Decision元素创建条件分支和流程控制。 - 并发处理:...
SQL Server 2008 JDBC驱动还支持一些高级特性,如读写分离、分布式事务、大数据类型处理(如XML和二进制数据)、JDBC批处理以及SQL Server特有的功能(如Service Broker或Integration Services)。 9. **错误处理*...
6. **批处理(Batch Processing)**:对于需要执行大量相似SQL语句的情况,JDBC提供批处理功能,允许一次发送多个SQL语句,从而提高效率。 7. **JDBC URL**:每个数据库驱动都有一个特定的JDBC URL格式,用于标识要...
JDBC批处理:** 批量处理SQL语句可以提高性能,通过`addBatch()`添加SQL到批处理队列,然后通过`executeBatch()`执行整个批次。 **5. JDBC连接池:** 为了提高性能和资源利用率,开发者通常使用连接池,如C3P0, ...
最后,我们还应该了解**JDBC批处理**。通过Statement对象的`addBatch()`方法添加多条SQL语句,然后一次性执行,可以提高执行效率。 总的来说,"达内jdbc学习笔记"涵盖了JDBC基础、数据库连接、SQL执行、结果集处理...
4. JDBC批处理 - 对于大量相似的SQL语句,批处理可以提高性能。使用addBatch()添加SQL,然后调用executeBatch()执行。 5. JDBC优化技巧 - 使用PreparedStatement而不是Statement,因为预编译的SQL语句更高效。 -...
达梦JDBC驱动支持ACID(原子性、一致性、隔离性、持久性)特性,可以进行事务管理和并发控制,比如设置自动提交、手动提交、回滚事务等。 6. **预编译语句与批处理**: 预编译语句(PreparedStatement)可以提高...
【JDBC批处理】 批处理可以将多个SQL语句组合成一个批次,一次提交,提高数据库操作性能。使用Statement对象的`addBatch()`添加SQL到批次,`executeBatch()`执行批次。 【JDBC连接池】 连接池是一种管理数据库...
7. **批处理**:JDBC提供批处理功能,可以一次性发送多条SQL语句,提高效率。 8. **结果集处理**:通过ResultSet对象获取查询结果,可以迭代遍历记录,也可以通过`next()`方法逐行读取。 9. **异常处理**:使用`...
### JDBC批处理 批处理允许一次提交多个SQL语句,提高效率。通过`Statement.addBatch()`添加SQL到批处理,`Statement.executeBatch()`执行。 ### SQL注入 为防止SQL注入,应使用PreparedStatement,将参数化占位...