`

jdbc 事物管理回滚

阅读更多
一,最近项目中,spring事物的管理,引发好奇,就是在事物回滚之前,对数据的插入更新操作,只要   
未提交,都不更改数据库,但是在查询时得到的结果却是插入更新之后的,带着疑问我做一下的例子.

二,JDBCHelper类
  
package com.ming.test.two;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCHelper {
	
	public static ThreadLocal<Connection> local = new ThreadLocal<Connection>();
	//启动时 加载驱动
	static{
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("mysql驱动不存在!");
		}
	}
	
	public static Connection getConnection(){
		Connection connection = local.get();//在当前线程找 
		try {
			if(connection==null){
				connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull", "root","root");
				local.set(connection);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("connection获取失败!");
		}
		return connection;
	}
	public static void closeConnection(Connection connection ){
		try {
			if(connection!=null){
				connection.close();
				local.remove();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}


test类
 
package com.ming.test.two;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test {
	public static String id="12";
	public static void main(String[] args) {
		Connection con = JDBCHelper.getConnection();
		try {
//			con.createStatement();
//			con.prepareStatement("");
			con.setAutoCommit(false);//现将事物自动提交设为false
			con.setTransactionIsolation(con.TRANSACTION_READ_COMMITTED);
			PreparedStatement p = con.prepareStatement("insert into account(accountId,id,username) values("+id+",1,'jacky"+id+"')");
			p.execute();
			//con.prepareStatement("select * from account where accountId=7");
			PreparedStatement p1 = con.prepareStatement("select * from account where accountId="+id);
			ResultSet set = p1.executeQuery();
			while(set.next()){
				System.out.println(set.getRow()+"-"+set.getString(1)+"-"+set.getString(2)+"-"+set.getString(3));
				
			}
			int i =1/0;
			con.commit();//提交
			
		} catch (Exception e) {
			System.out.println("exception");
			// TODO Auto-generated catch block
			try {
				con.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
		
	}
}


三,结论以及注意
   注意事项:autocommot必须设置为false;
   com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException : Can't call rollback when autocommit=true
    而且异常的发生必须是在commit之前,否则也失效的.
    结论就是,在事物回滚时,所有的更新新增操作都是无效,但是在con查询中这些都是最新影响的数据。
  
0
0
分享到:
评论

相关推荐

    spring JDBC事务管理

    例如,可以通过`JdbcTemplate`的`execute()`方法执行包含事务的SQL语句,并通过抛出异常来触发事务回滚。 **源码分析**:深入理解Spring JDBC事务管理的源码,可以帮助开发者更好地定制和优化事务处理。关键类如`...

    JDBC事务管理的简单实现

    该控制器提供了统一的事务管理方法,包括事务的提交、回滚和保存点等。该控制器也可以提供事务的timeout管理和事务传播控制。 四、事务模板的实现 事务模板是指提供模板方法对事务处理的代码进行控制。事务模板...

    JDBC事务管理.docx

    JDBC事务管理是数据库操作的重要组成部分,特别是在多用户并发访问数据库的环境中,保证数据的一致性和完整性至关重要。本文主要探讨了事务的基本概念、ACID原则、数据库并发问题以及解决方案。 首先,事务是数据库...

    JDBC事务管理项目

    “JDBC事务管理项目”涵盖了如何在Java应用中利用JDBC进行事务控制,包括开启手动事务、提交、回滚以及设置事务隔离级别等。理解并掌握这些知识对于开发健壮的数据库应用至关重要,能够确保数据的完整性和一致性。

    spring 简单实例 事务回滚

    总之,这个“spring简单实例 事务回滚”案例为我们提供了一个学习Spring事务管理的好起点。通过理解如何配置事务管理器,使用`@Transactional`注解,以及异常处理机制,我们可以更好地掌握Spring如何保证数据的一致...

    实例详解Spring JDBC事务管理.doc

    Spring JDBC事务管理 Spring框架提供了两种事务管理方式:编程式的事务管理(Programmatic transaction management)和声明式的事务管理(Declarative transaction management)。在本文中,我们将以JDBC事务管理...

    Spring/SpringMVC/MyBatis整合+事务回滚

    在"Spring/SpringMVC/MyBatis整合+事务回滚"的主题中,我们将深入探讨如何将这三个框架整合起来,并实现事务的回滚功能。 首先,Spring框架是核心,它提供了依赖注入(DI)和面向切面编程(AOP)的能力,使得代码更...

    JDBC事务管理及SavePoint示例Java开发Jav

    通过设置SavePoint,我们可以创建一个事务内部的状态点,如果后续操作出现问题,可以将事务回滚到这个状态点,而不是回滚整个事务。使用`Connection`对象的`setSavepoint(String savepointName)`方法可以设置...

    JDBC事务处理、提交、回滚。.docx

    在JDBC中,事务管理包括开始事务、提交事务和回滚事务。 1. **JDBC事务的基本概念** - **事务**:事务是数据库系统中执行的一系列操作的集合,这些操作要么全部成功,要么全部失败。事务具有四大特性,即原子性...

    JDBC事务管理(添加dbcp和c3p0测试.zip

    总结一下,JDBC事务管理涉及开始事务、提交和回滚,以确保数据一致性。连接流是关于高效管理数据库连接的概念。DBCP和C3P0是常用的数据库连接池实现,它们提供了一种有效的连接管理和复用机制,提高了系统的效率和...

    Spring事务管理A方法内部调用B方法的回滚问题测试代码

    在Spring框架中,事务管理是核心特性之一,用于确保...通过运行这些测试,你可以看到事务管理如何在A方法调用B方法时工作,以及在异常情况下如何回滚事务。这个示例代码对于理解和调试Spring事务管理的问题非常有帮助。

    JDBC的事务初探

    **四、异常处理与事务回滚** 在JDBC中,如果在事务处理过程中出现异常,通常会自动回滚事务,以防止数据不一致。但为了保险起见,可以在finally块中添加对事务的回滚操作,确保即使在异常情况下也能正确处理事务。 ...

    JDBC事务和JTA(XA)事务

    JDBC事务和JTA(XA)事务是两种常见的数据库事务类型,它们都可以用来管理数据库事务,确保数据库的一致性和可靠性。 JDBC事务 JDBC事务是Java Database Connectivity(JDBC)的事务机制,它可以将多个SQL语句组合成...

    spring-控制事物回滚

    - 压缩包中的`Test_jdbc_tran`可能是一个测试文件,用于演示如何在JDBC操作中控制事务回滚。在单元测试中,可以使用`@Transactional`注解来开启事务,并在测试结束后自动回滚,确保测试环境的清洁。 8. **Spring ...

    JDBC事务控制--讲述如何控制JDBC事务

    在数据库应用开发中,事务管理是一项重要的功能,它确保了一系列操作能够作为一个整体被正确地执行或回滚。Java Database Connectivity (JDBC) 是 Java 平台中用于连接数据库的标准 API,提供了丰富的功能来实现事务...

    基于Spring JDBC的事务管理

    本资源主要介绍基于Spring JDBC的事务管理,包括事务的定义、使用 @Transactional 注解、Spring JDBC的事务管理机制、事务的ACID特性、事务的传播、事务的隔离等内容。 事务的定义 事务是一种数据库中能够保证一...

    oracle 在java中的事务处理和异常回滚。

    手动事务管理通常通过`Connection`对象的`setAutoCommit(false)`方法来关闭自动提交,然后通过`commit()`和`rollback()`方法来控制事务的提交和回滚。下面是一个简单的示例: ```java try (Connection conn = ...

    在Java的JDBC使用中设置事务回滚的保存点的方法

    总结来说,Java的JDBC提供了强大的事务管理能力,包括设置保存点以实现部分回滚。这对于处理复杂的业务逻辑和异常处理是非常有用的。正确理解和使用这些功能,可以帮助开发人员编写出更加健壮和灵活的数据库应用程序...

    JDBC事务操作例子所需jar包

    在Java数据库连接(JDBC)中,事务是用于管理数据库操作的一组逻辑单元。当一组相关的操作必须一起成功完成,或者如果其中任何一部分失败,则全部回滚,事务就显得尤为重要。在本例中,我们关注的是与MySQL数据库...

    Spring中的@Transactional事物回滚实例源码

    本文将深入探讨这个注解的工作原理、如何配置以及如何在遇到异常时触发事务回滚。 首先,`@Transactional`是Spring提供的一个编程式事务管理方式,它允许我们在方法上声明事务属性,如传播行为、隔离级别、读写模式...

Global site tag (gtag.js) - Google Analytics