概述
文章目录
- 一、关于事务的基本知识
- 二、JDBC事务机制例子
- 三、代码实现
- 四、总结
一、关于事务的基本知识
事务是什么
- 事务通常用于操作数据库,也称数据库事务,数据库事务是由一系列的sql语句组成
事务的特点
- 事务中的sql语句,要么都执行,要么都不执行
JDBC的事务机制
- JDBC事务是自动提交的,什么是自动提交呢?
- 自动提交就是事务的DML(增加、删除、修改)sql语句,执行一次就提交一次结果
但在实际业务中,通过都是N条DML语句共同联合完成的,必须保证在同一事务的DML语句同时完成或同时失败,下面用例子说明
二、JDBC事务机制例子
简单的业务场景
- 账户111给账户222转钱
- 执行一个update语句,让账户111从原有的10变成0
- 执行一个update语句,让账户222从原有的0变成10
- 如果在这两个update语句中间发生代码异常,
- 那么根据JDBC事务自动提交,两个账户的钱都会变为0
这种情况在现实生活中发生,那两方不就亏大发了嘛,进一步说公司离倒闭就不远了
三行代码解决上述问题
//开启事务,将自动提交改为手动提交
conn.setAutoCommit(false);
//提交事务
conn.commit();
//回滚事务,如果代码没有执行commit方法,事务回滚到之前的状态
conn.rollback();
三、代码实现
public class JDBCTest11 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
try{
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/selfproj?useUnicode=true&characterEncoding=utf8","root","123456");
//开启事务
//将自动提交机制修改为手动提交
conn.setAutoCommit(false);
//创建预编译数据库操作对象
String sql = "update t_act set balance = ? where actno=?";
ps=conn.prepareStatement(sql);
//给?占位符传值
ps.setDouble(1,0);
ps.setInt(2,111);
//1.执行第一个update语句
int count = ps.executeUpdate();
//这里发生空指针异常
String s =null;
s.toString();
//给?占位符传值
ps.setDouble(1,10);
ps.setInt(2,222);
//2.执行第二个sql语句
count+= ps.executeUpdate();
System.out.println(count==2 ? "转账成功":"转账失败");
//程序能够走到这里说明以上没有异常,事务结束,手动提交数据
conn.commit();//提交事务
}catch (Exception e){
if (conn != null) {
try {
//回滚事务,如果代码出现异常没有执行commit方法,回滚事务
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
}finally{
//释放资源
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
附上sql脚本
drop table if exists t_act;
create table t_act(
actno int,
balance double(7,2)
);
insert into t_act(actno,balance) values(111,10);
insert into t_act(actno,balance) values(222,0);
commit;
select * from t_act
四、总结
java中只需要将自动提交事务改为手动提交事务,如果出现代码异常,就回滚到原有的状态
小声bb:原本以为事务是一个高大上的东西,其实在之前自考就学习过,果然实践才是硬道理
对了到mybatis框架时会用到事务哦
最后
以上就是自然小熊猫为你收集整理的搞懂JDBC事务机制,真的很简单的全部内容,希望文章能够帮你解决搞懂JDBC事务机制,真的很简单所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复