package transaction;

import jdbc.utils.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException; /*
* 1.一个事物里的操作要么都执行,要么都不执行
* 事物:一个或多个DML操作
* 2.事物处理原则:所有操作都完成时被commit,使修改永久保存
* 反之放弃所有操作,事物rollback到最初状态
* 3.提交后就不可回滚
* 4.DDL一旦执行,就会自动提交
* 5.DML默认自动提交,但是可以set autocommit = false 进行设置
* 6.默认在关闭连接时会自动提交数据
* */
public class TransactionTest { public static int update(Connection con,String sql,Object...args) {
PreparedStatement ps = null;
try {
ps=con.prepareStatement(sql);
for(int i=0;i<args.length;i++)
ps.setObject(i+1, args[i]);
return ps.executeUpdate();
}
catch(Exception ex) {
ex.printStackTrace(); }
finally {
JDBCUtils.closeResource(null, ps);
}
return 0;
} //要保证几个DML操作作为一个整体出现,要么都做,要么都不做
public static void testUpdateWithTx() {
Connection con = null;
try {
con = JDBCUtils.getConnection();
System.out.println(con.getAutoCommit());
//取消数据的自动提交来对应中间的异常
con.setAutoCommit(false); String sql = "update blank set money = money-100 where blankId = ?";
update(con,sql,0); //System.out.println(10/0);//模拟网络异常 sql = "update blank set money = money+100 where blankId = ?";
update(con,sql,1); System.out.println("转账成功");
con.commit();
}
catch(Exception ex) {//出现异常就必须rollback
ex.printStackTrace();
try {
con.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
finally {
try {//最后要把这个连接进行还原,再返回到数据库的连接池里去
con.setAutoCommit(true);
}
catch(SQLException e) {
e.printStackTrace();
}
JDBCUtils.closeResource(con, null);
}
}
public static void main(String []args) {
testUpdateWithTx();
}
}

1

最新文章

  1. Oracle安装
  2. ubuntu12.04 安装CS:APP Y86模拟器
  3. 「LINUX资料」Samba服务器(二)
  4. 通过WMI接口监控服务器性能
  5. 如何查看tensorflow版本与存储位置
  6. Delphi Register
  7. 创建、更新、删除文档。 --- Mongodb权威指南阅读。
  8. (6)javascript的程序控制结构及语句-----(1)条件判断
  9. linux下安装jdk 详细步骤(一条命令即可安装)
  10. Redis不支持ssl
  11. 莫烦theano学习自修第四天【激励函数】
  12. Web API 配置Help Page
  13. [Python]Practice makes perfect
  14. 如何在windows下安装Python(Python入门教程)
  15. 图解HTTP笔记
  16. vue全家桶+Koa2开发笔记(4)--redis
  17. Java 多线程 破解密码 demo
  18. Mysql基础知识—索引
  19. js添加收藏夹
  20. IP负载均衡技术

热门文章

  1. 原理图和PCB元件对应查找--Altium Designer
  2. Python基础教程(021)--Pycharm简介
  3. [CSP-S模拟测试]:联(小清新线段树)
  4. js中Array方法重写(二):myForEach;myEvery;mySome;myFilter;myReduce
  5. python数据储存
  6. MySQL按首字母查询
  7. Gym-100676E Time Limit Exceeded?
  8. nginx中如何设置gzip(总结)
  9. 解决myeclipse validation验证javascript导致速度变慢的现象
  10. mybatis关联查询之一对一查询