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=;i<args.length;i++)
ps.setObject(i+, args[i]);
return ps.executeUpdate();
}
catch(Exception ex) {
ex.printStackTrace(); }
finally {
JDBCUtils.closeResource(null, ps);
}
return ;
} //要保证几个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,); //System.out.println(10/0);//模拟网络异常 sql = "update blank set money = money+100 where blankId = ?";
update(con,sql,); 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 事物 commit 和rollback方法的更多相关文章

  1. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

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

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

  3. JDBC事物的处理

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

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

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

  5. JDBC——事物管理

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

  6. mysql事务,START TRANSACTION, COMMIT和ROLLBACK,SET AUTOCOMMIT语法

    http://yulei568.blog.163.com/blog/static/135886720071012444422/ MyISAM不支持 START TRANSACTION | BEGIN ...

  7. 14.5.2.2 autocommit, Commit, and Rollback

    14.5.2.2 autocommit, Commit, and Rollback 在InnoDB,所有的用户活动发生在一个事务里, 如果自动提交模式是启用的, 每个SQL语句形成一个单独的事务.默认 ...

  8. 14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚

    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚 如果自动提交模式被启用,在InnoDB里, 所有的用户活动发生在一个事务里, 每个SQL语句 ...

  9. flume-sink报错 java.lang.IllegalStateException: close() called when transaction is OPEN - you must either commit or rollback first

    1. 确认代码无误(根据情况修改,表示若获得不了数据不会自动commit或者rollback): Event event = channel.take(); if (event == null) { ...

随机推荐

  1. Oracle体系结构理论

    问题: 1:通常说Oracle数据库是什么? 2:如何理解Oracle实例? 3:Oracle实例由哪些部分组成,它们之间的作用是什么? 4:如何理解Oracle的物理结构? 5:Oracle的物理结 ...

  2. 08-图7 公路村村通(30 分)Prim

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N) ...

  3. Word中页码及目录、参考文献的制做方法

    1.页码从正文开始 1.要想从哪里显示第一页,就在这页的前一页的最后一行最后的地方,插入分隔符---下一页2.然后在你想显示第一页的那一页双击页脚处,点击取消掉“链接到前一条页眉”.(这是为了取消原来 ...

  4. JS中关于引用类型数据及函数的参数传递

    (JavaScript 中,函数的参数传递方式都是按值传递,没有按引用传递的参数) 一.数据类型 在 javascript 中数据类型可以分为两类: 基本类型值 primitive type,比如Un ...

  5. 【Dart学习】--之Duration相关方法总结

    一,概述 Duration表示从一个时间点到另一个时间点的时间差 如果是一个较晚的时间点和一个较早的时间点,Duration可能是负数 二,创建Duration 唯一的构造函数创建Duration对象 ...

  6. AT2000 Leftmost Ball(计数dp+组合数学)

    传送门 解题思路 设\(f[i][j]\)表示填了\(i\)个白色,\(j\)种彩色的方案数,那么显然\(j<=i\).考虑这个的转移,首先可以填一个白色,就是\(f[i][j]=f[i-1][ ...

  7. HDU-4475 Downward paths(找规律)

    Downward paths Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. soj#532 set p3175

    传送门 分析 代码 #include<bits/stdc++.h> using namespace std; ; <<],Ans; int n,m,N; inline int ...

  9. 重新认识Maven

    PS:第一次接触maven大约是两年前吧,隐约记得之前都是人工寻找并下载很多jar,放在项目的lib中(表示太年轻,没有接触过Ant或者其他类似的工具,就不找别人写的比较了).懒人永远有着自己的小聪明 ...

  10. django4-模板,templates

    如何使用templates呢? 在views.py文件中,函数或者方法通过return render(request,"userInfor.html",{"info_li ...