mysql学习16 ( JDBC操作事务 )
-
JDBC操作事务:
-
事务:要么都成功,要么都失败;
-
ACID原则:
-
原子性:要么都完成,要么都不完成
-
一致性:总数不变
-
隔离性:多个进程互不干扰
-
持久性:一旦提交不可逆,持久化到数据库
-
-
隔离性会产生问题:
-
脏读:一个事务读取了另一个没有提交的事务;
-
-
幻读:在一个事务内,读取到了别人插入的数据,导致前后读取出来的结果不一样(读者读者变多了)
-
-
-
代码案例:
-
开启事务;
-
一组业务执行完毕,提交事务;
-
可以在catch语句中,显式定义回滚语句,但是默认就会回滚;
/**
* 测试JDBC操作事务:
*
*/
public class TestDemo01 {
public static void main(String[] args) {
Connection conn =null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn= JdbcUtils.getConnection();//获取连接
/**
* 操作事务:
* 1,关闭数据库的自动提交功能;
* 2,业务完毕,提交事务
* 3,如果失败,就回滚事务
*/
conn.setAutoCommit(false);//1,关闭数据库的自动提交功能;会自动开启事务
String sql1="update account set money=money-100 where name='A'";
st=conn.prepareStatement(sql1);
st.executeUpdate();//执行1
int x=1/0;//报错
String sql2="update account set money=money+100 where name='B'";
st=conn.prepareStatement(sql2);
st.executeUpdate();//执行2
//业务完毕,提交事务
conn.commit();
System.out.println("成功");
} catch (SQLException e) {
try {
System.out.println("失败,回滚事务");
conn.rollback();//如果失败,就回滚事务;不写也会默认回滚
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}finally {
JdbcUtils.release(conn,st,rs);
}
}
}
-
分类:
03-mysql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律