事务概述

mysql事务操作

sql语句

描述

start transaction;

开启事务(mysql 默认事务自提交,我们应该设置手动提交)

commit;

提交事务

rollback;

回滚事务

 

 

 

 

 

  1. MYSQL中可以有两种方式进行事务的管理:
    1. 手动提交:先开启,再提交
    2. start transaction;

      update account set money=money-1000 where name='Jack';

      update account set money=money+1000 where name='Rose';

      commit;

      #或者

      rollback;

    3. 2.自动提交:MySql默认自动提交。及执行一条sql语句提交一次事务。

    4. * 设置自动提交的参数为OFF:

      set autocommit = 0;  -- 0:OFF  1:ON

    5. 注意:Oracle数据库事务不自动提交

JDBC事务操作

Connection对象的方法名

描述

conn.setAutoCommit(false)

开启事务 start transaction;

conn.commit()

提交事务

conn.rollback()

回滚事务

//事务模板代码

public void demo01() throws SQLException{

// 获得连接

Connection conn = null;

try {

//#1 开始事务

conn.setAutoCommit(false);

//.... 

//#2 提交事务

conn.commit();

} catch (Exception e) {

//#3 回滚事务

conn.rollback();

} finally{

// 释放资源

conn.close();

}

}

DBUtils事务操作

Connection对象的方法名 

描述

conn.setAutoCommit(false)

开启事务

new QueryRunner()

创建核心类,不设置数据源(手动管理连接)

query(conn , sql , handler, params )  或

update(conn, sql , params)

手动传递连接

DbUtils.commitAndCloseQuietly(conn)  或

DbUtils.rollbackAndCloseQuietly(conn)

提交并关闭连接

回滚并关闭连接

过程与JDBC操作一样,只不过需要注意的是,connection必须手动控制,不能交给DBUtils去控制。

说明 : Service 层代码中关于 `事务提交与回滚` 使用 DBUtils 方式实现, 代码如下 :

public class AccountService {

	// 转账操作
	public boolean tranfer(String outUser, String inUser, int money) {
		
		// 开启事务 : (由 `连接` 对象来控制)
		Connection conn = null;
		
		AccountDao accountDao = new AccountDao();
		
		try {
			// 获取连接对象
			conn = JDBCUtils.getConnection();
			// 开启事务
			conn.setAutoCommit(false);

			accountDao.out(conn, outUser, money);
			int i = 10 / 0;
			accountDao.in(conn, inUser, money);
			
			// 提交事务 (让修改永久保存)
			DbUtils.commitAndCloseQuietly(conn);
			
			// 返回
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			
			// 回滚事务
			DbUtils.rollbackAndCloseQuietly(conn);
		}
		
		return false;
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值