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

jdbc 事物的更多相关文章

  1. JDBC事物的处理

    JDBC事物的处理: 概念:事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令: start transaction  开启事务 Rollback   ...

  2. 数据库事物 jdbc事物 spring事物 隔离级别:脏幻不可重复读

    1.数据库事物: 事物的概念 a给b打100块钱的例子 2.jdbc事物: 通过下面代码实现 private Connection conn = null; private PreparedState ...

  3. jdbc 事物 commit 和rollback方法

    package transaction; import jdbc.utils.*; import java.sql.Connection; import java.sql.PreparedStatem ...

  4. JDBC——事物管理

    案例:银行转账问题,数据库如下 相关API setAutoCommit(boolean autoCommit)  将此连接的自动提交模式设置为给定状态.设置事务是否自动提交如果设置为false,表示手 ...

  5. JDBC学习1:详解JDBC使用

    什么是JDBC JDBC(Java Database Connectivity),即Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同一访问,它由一组用Java ...

  6. 在Hibernate中分别使用JDBC和JTA事务的方法

    在Hibernate中使用JDBC事务 Hibernate对JDBC进行了轻量级的封装,它本身在设计时并不具备事务处理功能.Hibernate将底层的JDBCTransaction或JTATransa ...

  7. 浅谈JDBC(二)

    JDBC中的事务 简单来说,事务就是要保证一组DAO方法的操作,要么一起成功要么一起失败. 1.事务控制的位置 在Service中的业务方法内进行事务控制. 2.事务控制的代码 a.注意:JDBC会自 ...

  8. java_web学习(12)JDBC

    数据持久化       持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的 ...

  9. Java事物基础总结

    1.什么是事物? 事物是逻辑上的的一种操作,这个操作过程中的每一个元素要么全部成功,要么全部失败.例如,银行转账过程视为一个事物,转出过程和转入过程要求全部成功或全部失败,通过提交事物或者回滚事物实现 ...

随机推荐

  1. 【LeetCode 75】颜色分类

    题目链接 [题解] 维护一个左边界l和一个右边界r 其中0..l-1都是'0' 而 r+1..n-1都是'2' 我们令i=l;i<=r; 枚举每一个a[i]; ①如果a[i]=2.那么把a[i] ...

  2. SEERC 2018 I - Inversion (Gym - 101964I) DP

    Gym - 101964I 题意 有一个数组\(p\),如果满足\(i<j,p_i>p_j\),则\(i,j\)之间就有一条边相连,问存在多少个集合满足集合内的元素互不相连,且集合外的元素 ...

  3. 【HDOJ6598】Harmonious Army(最小割)

    题意:有n个人,每个人可以从A,B两种职业中选择一种 有m对两人组,如果两个人都是A能获得p的收益,一个A一个B能获得q的收益,都是B能获得r的收益,其中q=p/4+r/3,保证p%4=0,r%3=0 ...

  4. LOJ 2541 「PKUWC2018」猎人杀——思路+概率+容斥+分治

    题目:https://loj.ac/problem/2541 看了题解才会……有三点很巧妙. 1.分母如果变动,就很不好.所以考虑把操作改成 “已经选过的人仍然按 \( w_i \) 的概率被选,但是 ...

  5. Activator.CreateInstance with parameters

    https://docs.microsoft.com/en-us/dotnet/api/system.activator.createinstance?view=netframework-4.8#Sy ...

  6. appium常见问题03_appium脚本报错selenium.common.exceptions.WebDriverException

    运行appium脚本时报错selenium.common.exceptions.WebDriverException...,如下截图: 该报错说明appium和app的内置chrome版本不一致 [解 ...

  7. 关于列表倒序输出的几种方法——python第7天

    项目:将列表li1 = [1, 6, 4, 3, 7, 9]倒序输出为[9, 7, 6, 4, 3, 1] li2 = ['a', 'm', 's', 'g']倒序输出为['g', 's', 'm', ...

  8. js比较日期时间的大小

    var myDate = new Date(); var timed = myDate.toLocaleDateString(); var oDate1 = new Date(item.express ...

  9. 蓝桥杯:排它平方数-java

    问题描述: 小明正看着 203879 这个数字发呆.原来,203879 * 203879 = 41566646641这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同 ...

  10. Linux查看软件安装路径,和文件的位置

    查看软件是否安装:rpm -qa|grep xx 列出软件安装包安装的文件:rpm -ql 直接使用rpm -qal |grep mysql 查看mysql所有安装包的文件存储位置 通过find去查找 ...