JDBC管理事务

基本介绍

就是处理在mysql的事务
复习一下:事务是一组sql语句需要开启和提交,事务中的sql语句要么全部生效,要么全部不生效,提交之后就是全部生效,中间可以设置保存点,回退到保存点,或直接回退到最开始事务的状态

由事务还引出我们mysql的隔离级别来着
在这里插入图片描述
1.默认不开启事务,你执行语句就是自动提交,不能回滚
2.使用事务的特性
3.利用Connection的setAutoCommit(false)就会取消自动提交
4.commit()提交和sql相同
5.rollback()可以加参数或不加,加的话就是我们保存点的名称
不加就是回滚到最开始
在这里插入图片描述

模拟应用

在这里插入图片描述
搞个转账这种

如果你不使用事务,可能出现update出现异常,第一个用户少了钱,而第二个用户没有多钱
在这里插入图片描述

这种开发后,多线程高并发你指不定哪个就报异常了
所以用事务解决

package yuan.hsp.JDBC;

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

import yuan.hsp.JDBC.jdbcutils.JDBCUtils;

public class 事务处理 {
public static void main(String[] args) throws SQLException {
	Connection connection = JDBCUtils.getConnection();
	connection.setAutoCommit(false);//是连接设置!,连接创建所有Statement都不会自动提交
	String sql="update account set money = money-100 where id=1";
	String sql2="update account set money = money+100 where id=100";
	PreparedStatement prepareStatement = connection.prepareStatement(sql);
	prepareStatement.executeUpdate();//这个加不加update都是运行和他绑定的语句
	//返回结构不同这个是int(行数)不加的话就是boolean
	prepareStatement.execute(sql2);//!preparedStatement可以多次执行不需要?赋值的
	//如果执行?赋值的只能执行一次
	connection.commit();//一定要提交!
	JDBCUtils.close(null, prepareStatement, connection);
	
}
}

在这里插入图片描述
注意:1.事务针对连接2.preparedStatement可以执行多句不需要?赋值的,如果需要多次执行?赋值,只能多建几个preparedStatement!!!,默认execute就是执行绑定的那句,后面参数是字符串的话就是执行对应字符串
其实上面那个代码也不是特别好
正常写

try{转账语句}
catch{回滚语句,打印异常语句(输出转账失败什么的)}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值