JDBC事物控制

12 篇文章 0 订阅
JDBC事物控制
  1. 什么是事务:一个包含多个步骤或者业务操作。如果这个业务或者步骤被事务管理,则这多个步骤要么同时成功,要么回滚(多个步骤同时执行失败),这个步骤是一个整体,不可分割的。
  2. 操作:
    - 开启事务:mysql----->start transaction
    - 提交事务:commit
    - 回滚事务: rollback
  3. 使用Connection 对象管理事物
    - 开启事务: setAutoCommit(boolean autoCommit): 指定该方法里面传入false值,手动开启事务
    在执行sql 语句之前开启的事务
    - 提交事务:commit();---->当所有的sql语句执行完毕才提供事务
    - 回滚事务:rollback;—>当事务中发生异常时回滚事务 回滚事务放在catch语句
  4. 示例:以银行转账为例:让张三给李四转账10000钱
	// 含有事务的转账
	public static void transform02(){
		// 让张三给李四转账10000钱
		// 首先张三的钱减少10000钱
		// 然后让李四的钱增加10000钱
		// 定义实现转账的两条sql语句
		double money = 10000;
		String username01 = "张三";
		String username02 = "李四";
		String sql01 = "update account set balance = balance-? where username = ?";
		String sql02 = "update account set balance = balance+? where username = ?";
		// 使用Connection对象手动开启事务 setAutoCommit(boolean autoCommit);
		Connection con = DBUtil.getConnection();
		try{
			con.setAutoCommit(false);
			// 通过con获取预处理对象  先让张三的钱减少10000
			ps01 = con.prepareStatement(sql01);
			ps01.setDouble(1,money);
			ps01.setString(2,username01);
			// 执行sql语句
			int count = ps01.executeUpdate();
			// 手动制造一个异常
			int i = 1 / 0;
			// 再让利斯的钱增加10000
			// 通过con 获取预处理对象
			ps02 = con.prepareStatement(sql02);
			ps02.setDouble(1,money);
			ps02.setString(2,username02);
			// 执行sql语句 
			int count02 = ps02.executeUpdate();
			// 提交事务
			con.commit();
			System.out.println("转账成功");
		} cath (Exception e) {
			// 事务回滚
			try {
				con.rollback();
				System.out.println("转账失败");			
			}  catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			// 把打开的各种连接对象释放掉
			try{
				ps02.close();
				ps01.close();
				con.close();
			} catch (SQLEXception e) {
				e.printStackTrace();
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值