开发过程中事务控制

一、在JDBC连接中开启事务,调用完成后关闭连接(传统方式不推荐使用)

private static DataSource ds;

	static{
		try{
			Properties prop = new Properties();
			InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
			prop.load(in);
			BasicDataSourceFactory factory = new BasicDataSourceFactory();
			ds = factory.createDataSource(prop);
		}catch (Exception e) {
			throw new ExceptionInInitializerError(e);
		}
	}

	public void transfer() throws SQLException{
		Connection conn = null;
		try{
			conn = JdbcUtils.getConnection();
			conn.setAutoCommit(false);
			//对数据进行操作			
			conn.commit();
		}finally{
			if(conn!=null) conn.close();
		}
	}

 二、用ThreadLocal类在线程上绑定一个连接

private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();

 在获得连接的时候就绑定到threadLocal 上

public static Connection getConnection() throws SQLException{
		try{
			//得到当前线程上绑定的连接
			Connection conn = threadLocal.get();
			if(conn==null){  //代表线程上没有绑定连接
				conn = ds.getConnection();
				threadLocal.set(conn);
			}
			return conn;
		}catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

 然后开启事务

public static void startTransaction(){
		try{
			//得到当前线程上绑定连接开启事务
			Connection conn = threadLocal.get();
			if(conn==null){  //代表线程上没有绑定连接
				conn = ds.getConnection();
				threadLocal.set(conn);
			}
			conn.setAutoCommit(false);
		}catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

 

执行完相应操作后提交事务

public static void commitTransaction(){
		try{
			Connection conn = threadLocal.get();
			if(conn!=null){
				conn.commit();
			}
		}catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

 

最后关闭连接

	public static void closeConnection(){
		try{
			Connection conn = threadLocal.get();
			if(conn!=null){
				conn.close();
			}
		}catch (Exception e) {
			throw new RuntimeException(e);
		}finally{
			//千万注意,解除当前线程上绑定的链接(从threadlocal容器中移除对应当前线程的链接)
			threadLocal.remove();   
		}
	}

 

 第三种方法是用spring中的事务管理器,本次不做讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值