`
zjmfeeling
  • 浏览: 23301 次
  • 性别: 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连接数据库的方式2

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

    Java_JDBC由浅入深

    8.3 事务提交与回滚 54 8.4 设置保存点 55 8.5 JTA事务的介绍 56 8.6 数据库的隔离级别介绍 56 8.6.1 未提交读 57 8.6.2 提交读 58 8.6.3 重复读 59 8.6.4 序列化读 60 8.7 小结 62 第九节 PreparedStatement接口的...

    jdbc基础和参考

    JDBC批处理: addBatch executeBatch Statement PreparedStatement Statement{ 1.获取连接 getConnection(); 2.创建Statement conn.createStatement(); 3.执行sql语句 String sql .... insert delete update ...

    mysql-connector-java-5.1.46-bin

    批处理操作:executeBath() 一次执行多个任务比较快 5.处理结果 1.ResultSet中行的第一列索引是1,不是0,  使用列名作为查询条件数据是大小写敏感的  2.可以设置结果集是否回滚,可否更新 6.关闭连接 按照 ResultSet...

    MySQL 5.1参考手册 (中文版)

    3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...

    mysql官方中文参考手册

    3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...

    MYSQL中文手册

    3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 ...

    MySQL 5.1参考手册中文版

    3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 ...

    MySQL 5.1参考手册

    3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...

    MySQL5.1参考手册官方简体中文版

    3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...

    mysql5.1中文手册

    在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6....

    MySQL 5.1官方简体中文参考手册

    3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...

    MySQL 5.1中文手冊

    3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...

Global site tag (gtag.js) - Google Analytics