1. package transaction;
  2.  
  3. import jdbc.utils.*;
  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.SQLException;
  7.  
  8. /*
  9. * 1.一个事物里的操作要么都执行,要么都不执行
  10. * 事物:一个或多个DML操作
  11. * 2.事物处理原则:所有操作都完成时被commit,使修改永久保存
  12. * 反之放弃所有操作,事物rollback到最初状态
  13. * 3.提交后就不可回滚
  14. * 4.DDL一旦执行,就会自动提交
  15. * 5.DML默认自动提交,但是可以set autocommit = false 进行设置
  16. * 6.默认在关闭连接时会自动提交数据
  17. * */
  18. public class TransactionTest {
  19.  
  20. public static int update(Connection con,String sql,Object...args) {
  21. PreparedStatement ps = null;
  22. try {
  23. ps=con.prepareStatement(sql);
  24. for(int i=;i<args.length;i++)
  25. ps.setObject(i+, args[i]);
  26. return ps.executeUpdate();
  27. }
  28. catch(Exception ex) {
  29. ex.printStackTrace();
  30.  
  31. }
  32. finally {
  33. JDBCUtils.closeResource(null, ps);
  34. }
  35. return ;
  36. }
  37.  
  38. //要保证几个DML操作作为一个整体出现,要么都做,要么都不做
  39. public static void testUpdateWithTx() {
  40. Connection con = null;
  41. try {
  42. con = JDBCUtils.getConnection();
  43. System.out.println(con.getAutoCommit());
  44. //取消数据的自动提交来对应中间的异常
  45. con.setAutoCommit(false);
  46.  
  47. String sql = "update blank set money = money-100 where blankId = ?";
  48. update(con,sql,);
  49.  
  50. //System.out.println(10/0);//模拟网络异常
  51.  
  52. sql = "update blank set money = money+100 where blankId = ?";
  53. update(con,sql,);
  54.  
  55. System.out.println("转账成功");
  56. con.commit();
  57. }
  58. catch(Exception ex) {//出现异常就必须rollback
  59. ex.printStackTrace();
  60. try {
  61. con.rollback();
  62. } catch (SQLException e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. finally {
  67. try {//最后要把这个连接进行还原,再返回到数据库的连接池里去
  68. con.setAutoCommit(true);
  69. }
  70. catch(SQLException e) {
  71. e.printStackTrace();
  72. }
  73. JDBCUtils.closeResource(con, null);
  74. }
  75. }
  76. public static void main(String []args) {
  77. testUpdateWithTx();
  78. }
  79. }

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. 浅谈js for循环输出i为同一值的问题(闭包解决)

    1.最近开发中遇到一个问题,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5. <html> <head> <meta http-equiv ...

  2. [杂题]:C/c(二分答案)

    题目传送门(内部题54) 输入格式 第一行一个整数表示$n$.第二行$n$个整数表示初始序列.(这行原题没有,是我加的)接下来$2n$行每行两个整数,分别表示$X_i,Y_i$.数据保证至少存在一种方 ...

  3. C# 后台报错输出到日志

    1.C# 方法 /// <summary> /// 异常处理 /// </summary> /// <returns></returns> public ...

  4. linux: 如何查看端口占用?

    查看端口占用 $: netstat -anp | grep 8888 tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 13404/python3 tcp 0 1 172 ...

  5. 杂项-报表-Minitab:Minitab百科

    ylbtech-杂项-报表-Minitab:Minitab百科 Minitab软件是现代质量管理统计的领先者,全球六西格玛实施的共同语言,以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专 ...

  6. 多级xml解析方案

    package com.people.xmlToSql; import java.io.File; import java.io.IOException; import java.io.StringW ...

  7. javascript: 禁用右键、文本选择功能、复制按键

    <script type="text/javascript"> //禁用右键.文本选择功能.复制按键 //http://www.jinyuanbao.cn $(docu ...

  8. DLNA和UPNP

    继之前一个人研究ONVIF协议,SSDP协议,现在又要跳DLNA的坑,说到DLNA,必须离不开UPNP,这俩关系特好 DLNA官网:http://www.dlna.org/ UPNP官网:http:/ ...

  9. FFT&NTT数学解释

    FFT和NTT真是噩梦呢 既然被FFT和NTT坑够了,坑一下其他的人也未尝不可呢 前置知识 多项式基础知识 矩阵基础知识(之后会一直用矩阵表达) FFT:复数基础知识 NTT:模运算基础知识 单位根介 ...

  10. VS2012修改代码时会把后面的覆盖

    vs2012修改代码时会把后面的覆盖,并且鼠标指针变成灰色竖方块 解决:按一下键盘上的Insert键