返回

数据库事务的问题

发布时间:2022-11-24 04:30:47 304
# 数据库# sql# 数据

需要实现在user_table表中AA给BB转账1000

数据库事务的问题_i++

 

AA.balance-1000同时BB.balance+1000

两个事情必须要么执行,要么不执行,这就是事务

数据库事务的问题_i++_02

 

数据库事务的问题_数据库_03

 

数据库事务的问题_sql_04

 

数据库事务的问题_jdbc_05

 

数据库事务的问题_sql_06

 

没有加事务的做法:

public static void updateCustomer(String sql,Object... args){
Connection connection = null;
PreparedStatement ps = null;
try {
connection = JDBCUtils.getConnection();
ps = connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
ps.setObject(i+1,args[i]);
}
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(connection,ps);
}
}
@Test
public void test01(){

String sql1="update user_table set balance=balance-1000 WHERE `user`=?";
Common.updateCustomer(sql1,"AA");

System.out.println(10/0);
String sql2="update user_table set balance=balance+1000 WHERE `user`=?";
Common.updateCustomer(sql2,"BB");

System.out.println("转账成功");
}

考虑事务以后的代码实现update:

public static void updateCustomerTx(Connection connection,String sql,Object... args){
PreparedStatement ps = null;
try {
ps = connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
ps.setObject(i+1,args[i]);
}
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.closeResource(null,ps);
}
}
@Test
public void test2() {
Connection connection=null;
try {
connection = JDBCUtils.getConnection();
System.out.println("连接的默认提交方式:" + connection.getAutoCommit());
connection.setAutoCommit(false);
String sql1 = "update user_table set balance=balance-1000 WHERE `user`=?";
Common.updateCustomerTx(connection, sql1, "AA");
System.out.println(10/0);
String sql2 = "update user_table set balance=balance+1000 WHERE `user`=?";
Common.updateCustomerTx(connection, sql2, "BB");
System.out.println("转账成功");
connection.commit();
} catch (Exception e) {
try {
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
connection.setAutoCommit(false);
JDBCUtils.closeResource(connection,null);
}

}

数据库事务的问题_i++_07

 

数据库事务的问题_jdbc_08

 

数据库事务的问题_sql_09

 

数据库事务的问题_jdbc_10

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Nginx For Windows 路由配置 2022-11-24 04:22:09