`
zjmfeeling
  • 浏览: 23782 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

JDBC 批处理 无法回滚

阅读更多
 /**
		 * 预编译+批处理模式更新数据
		 * */
		@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的批处理功能

    本文将详细阐述JDBC批处理的基本概念、优势以及如何在实际应用中使用。 一、批处理的概念 批处理是指一次性提交多个SQL语句到数据库进行执行,而不是逐个发送和执行。在JDBC中,批处理主要通过Statement或...

    JDBC笔记 方立勋

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

    JDBC进行批处理共4页.pdf.zip

    **JDBC批处理详解** 在Java数据库连接(Java Database Connectivity, JDBC)中,批处理是一项重要的功能,它允许开发者一次性提交多个SQL语句,从而提高数据处理的效率和性能。批处理是数据库操作中的优化手段,...

    jdbc 增删改查事物处理, 批处理,以及预编译示例代码

    在JDBC中,`Connection`对象提供了事务管理的方法,如`setAutoCommit(false)`关闭自动提交,`commit()`提交事务,`rollback()`回滚事务。 - **事务的四大特性(ACID)**:原子性(Atomicity)、一致性(Consistency...

    jdbc连接数据库的方式2

    我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的...

    smoke-tests-conf-0.2.0-incubating.zip

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

    JDBC教程

    JDBC批处理 批处理可以提高性能,通过批量执行多条SQL语句。可以使用Statement对象的`addBatch()`方法添加SQL语句到批处理队列,然后通过`executeBatch()`执行。 ### 6. JDBC性能优化 - 使用PreparedStatement...

    openGauss-1.1.0-JDBC.tar.gz

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

    MySQL_4_JDBC高级操作和事务1

    **JDBC批处理操作** 批处理是提高数据库操作性能的一种方式,通过一次性提交多条SQL语句,减少了网络通信和数据库处理的开销。以下是使用Statement和PreparedStatement对象进行批处理的基本步骤: 1. **使用...

    spring batch批处理 教程

    - 批量操作数据库:利用JDBC批处理功能优化数据库操作性能。 - Job多个Step的执行:Job可以包含多个Step,根据需要组合执行。 - 条件流程和流程决策:使用Flow和Decision元素创建条件分支和流程控制。 - 并发处理:...

    sql server2008 jdbc驱动

    SQL Server 2008 JDBC驱动还支持一些高级特性,如读写分离、分布式事务、大数据类型处理(如XML和二进制数据)、JDBC批处理以及SQL Server特有的功能(如Service Broker或Integration Services)。 9. **错误处理*...

    jdbc jdbc jdbc

    6. **批处理(Batch Processing)**:对于需要执行大量相似SQL语句的情况,JDBC提供批处理功能,允许一次发送多个SQL语句,从而提高效率。 7. **JDBC URL**:每个数据库驱动都有一个特定的JDBC URL格式,用于标识要...

    JDBC (API)

    JDBC批处理:** 批量处理SQL语句可以提高性能,通过`addBatch()`添加SQL到批处理队列,然后通过`executeBatch()`执行整个批次。 **5. JDBC连接池:** 为了提高性能和资源利用率,开发者通常使用连接池,如C3P0, ...

    达内jdbc学习笔记

    最后,我们还应该了解**JDBC批处理**。通过Statement对象的`addBatch()`方法添加多条SQL语句,然后一次性执行,可以提高执行效率。 总的来说,"达内jdbc学习笔记"涵盖了JDBC基础、数据库连接、SQL执行、结果集处理...

    Java语言SQL接口 JDBC编程技术

    4. JDBC批处理 - 对于大量相似的SQL语句,批处理可以提高性能。使用addBatch()添加SQL,然后调用executeBatch()执行。 5. JDBC优化技巧 - 使用PreparedStatement而不是Statement,因为预编译的SQL语句更高效。 -...

    Dm7JdbcDriver16.jar Dm7JdbcDriver17.jar Dm7JdbcDriver18.jar

    达梦JDBC驱动支持ACID(原子性、一致性、隔离性、持久性)特性,可以进行事务管理和并发控制,比如设置自动提交、手动提交、回滚事务等。 6. **预编译语句与批处理**: 预编译语句(PreparedStatement)可以提高...

    达内,tarena,jdbc笔记,jdbcPPT课件,达内jdbc笔记

    【JDBC批处理】 批处理可以将多个SQL语句组合成一个批次,一次提交,提高数据库操作性能。使用Statement对象的`addBatch()`添加SQL到批次,`executeBatch()`执行批次。 【JDBC连接池】 连接池是一种管理数据库...

    sqlserver在JDK1.6用的JDBC

    7. **批处理**:JDBC提供批处理功能,可以一次性发送多条SQL语句,提高效率。 8. **结果集处理**:通过ResultSet对象获取查询结果,可以迭代遍历记录,也可以通过`next()`方法逐行读取。 9. **异常处理**:使用`...

    jdbc_notes

    ### JDBC批处理 批处理允许一次提交多个SQL语句,提高效率。通过`Statement.addBatch()`添加SQL到批处理,`Statement.executeBatch()`执行。 ### SQL注入 为防止SQL注入,应使用PreparedStatement,将参数化占位...

Global site tag (gtag.js) - Google Analytics