JDBC之事务处理

一:什么是事务

银行转账,张三给李四转了1000,张三账户上减去1000,李四账户就要加上1000,事务中的多个操作,要么完全成功,要么完全失败,不可能事情之做了一半。

事务的四大特性(ACID)

  • 原子性(Atomicity):事务中所有操作是不可分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。
  • 一致性(Consistency):事务执行后,数据库状态与其他业务中规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。
  • 隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会互相干扰。
  • 持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

二:MySQL中开启和关闭事务

开启事务:

start transaction;

回滚事务:

rollback;

提交事务:

commit;

三:JDBC中完成对事务的处理

小例子:完成银行转账案例

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

/**
 * 
 * @author lenovo 对数据库的操作
 */
public class AccountDao {
	public void updateBalance(Connection con, String name, int balance) {

		try {

			// 2.给出sql模板,创建pstmt
			String sql = "update account set balance=balance+? where name=?";
			PreparedStatement pstmt = con.prepareStatement(sql);

			// 3.对参数进行赋值
			pstmt.setInt(1, balance);
			pstmt.setString(2, name);
			// 4.更新语句
			pstmt.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

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

/**
 * 演示转账功能
 * @author lenovo
 *
 */
public class Demo1 {
	//同一个事务所有的操作,都在使用同一个Connection对象
    public static void transfer(String from,String to ,int money) {
    	Connection con=null;
    	//
    	try {
    		//开启事务
    		con=JdbcUtils.getConnection();
    		con.setAutoCommit(false);//设置false为开启事务
    		AccountDao ado=new AccountDao();
    		ado.updateBalance(con,from, -money);//给from减去相应金额
    		ado.updateBalance(con,to,money);//给to加上相应金额
    		//提交事务
    		con.commit();
    		con.close();
    	}catch(Exception e){
    		
    		//回滚事务
    		try {
				con.rollback();
				con.close();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
    	}
    }
    public static void main(String[] args) {
		transfer("张三","李四",100);
	}
}

四:查询MySQL的隔离级别

 select @@transaction_isolation;
原创文章 114 获赞 84 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44867340/article/details/105619133