java中mysql的JDBC的事务管理

本文介绍了如何在Java中使用JDBC进行MySQL事务管理,包括何时开启、提交和回滚事务。通过一个具体的转账案例,展示了在没有事务管理时可能出现的问题,强调了添加事务管理的重要性。


 什么时候开启事务提交事务、回滚事务?


事务的开启


事务的提交


事务的回滚




自己写的事务的代码

package homework01;

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

import org.junit.Test;

import myUtils.JDBCUtil;

public class Test01 {
	/*
	 * 总结整个数据库连接对象,无论是driud还是c3p0都要返回给数据库连接操作来将数据连接
	 * 操作数据基本的用PreparedStatement对象来操作,
	 * 如果用DBUtils就是将QueryRunner创建对象,如果是增删改就用update,如果是查就用query
	 */
	@Test
	public void Demo01() throws SQLException{
		Connection conn = JDBCUtil.getConnection();
		//将事务开启,注意这里false才是开启事务,true是自动提交事务
		conn.setAutoCommit(false);
		
		String sql="UPDATE accoumt SET money=money+1000  WHERE NAME='小张'";
		PreparedStatement ps = conn.prepareStatement(sql);
		
		String sql1="UPDATE accoumt SET money=money-1000  WHERE NAME='小凤' ";
		PreparedStatement ps1 = conn.prepareStatement(sql1);
		
		 ps.executeUpdate();
		 ps1.executeUpdate();
		 
		
		 //自己设置将事务在这里提交
		 conn.commit();
		 //将事务回滚,回到操作之前
		 conn.rollback();
	}
	

}




实现aaabbb转账1000的案例代码:掌握开启事务提交事务、回滚事务地方

在转账中没有添加事务的管理,出现aaa账号的钱被转丢了,但是bbb账号的钱没有任何变化。需要给转账的功能添加事务的管理。

在转账中添加事务管理
@Test
	/**
	 * 完成转账的案例
	 */
	public void demo1(){
		Connection conn = null;
		PreparedStatement pstmt  = null;
		try{
			/**
			 * 完成转账代码:
			 * * 扣除某个账号的钱
			 * * 给另外一个账号加钱
			 */
			// 获得连接:
			conn = JDBCUtils.getConnection();
			// 开启事务
			conn.setAutoCommit(false);
			// 编写SQL语句:
			String sql = "update account set money = money + ? where name = ?";
			// 预编译SQL:
			pstmt = conn.prepareStatement(sql);
			// 设置参数:
			// 用aaa账号给bbb账号转1000元
			pstmt.setDouble(1, -1000);
			pstmt.setString(2, "aaa");
			// 执行SQL:扣除aaa账号1000元
			pstmt.executeUpdate();
			
			int i = 1 / 0;
			
			// 给bbb账号加1000
			pstmt.setDouble(1, 1000);
			pstmt.setString(2, "bbb");
			pstmt.executeUpdate();
			
			// 提交事务:
			conn.commit();
		}catch(Exception e){
			// 回滚事务:
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}finally{
			JDBCUtils.release(pstmt, conn);
		}







评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值