一、事务(Transaction)

  1、 在开发中我们的一个业务往往需要同时操作多个表,这些操作往往是不可分割,业务中的对数据库的多次操作,要么同时成功,要么全都失败。

  2、注意:我们在同一个事务中使用的数据库连接(Connection)必须是同一个。

  3、事务的特性(ACID):

    1.原子性(atomicity)

        一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

    2.一致性(consistency)

        事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

    3.隔离性(isolation)

           一个事务的执行不能被其他事务干扰。

        即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

    4.持久性(durability)

        持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

        接下来的其他操作或故障不应该对其有任何影响。

  4、操作失误的基本步骤:

      1.开启事务

        - 开启事务以后,我们只后的所有操作将都会在同一个事务当中

      2.操作数据库

        - 开启事务以后再去操作数据库,所有操作将不会直接提交到数据库中

      3.提交事务

        - 将修改应用到数据库

      4.回滚事务

        - 数据库操作过程中出现异常了,回滚事务,回滚事务以后,数据库变成开启事务之前的状态

  5、 mysql中的事务控制

    #开启事务

      START TRANSACTION

    #回滚事务

      ROLLBACK

    #提交事务

      COMMIT

  6、 JDBC中的事务主要通过Connection对象来控制的

    1.开启事务

      void setAutoCommit(boolean autoCommit) throws SQLException;

        - 设置事务是否自动提交,默认是自动提交

        - 设置事务手动提交

          conn.setAutoCommit(false);

    2.提交事务

      void commit() throws SQLException;

        - 提交事务

          conn.commit()

    3.回滚事务

      void rollback() throws SQLException;

        - 回滚事务

          conn.rollback()

二、事务控制

  数据访问层的方法用来执行对数据库的操作,为了保证同一个事务中各个原子操作使用的数据库连接(Connection)是同一个,

    我们一般在Service层获取数据库连接并传递到dao层

   public void updateBalance(Connection conn,double money,Integer id) throws SQLException{
PreparedStatement ps=null;
String sql="update t_money set balance=balance+? where id=?"; try {
ps=conn.prepareStatement(sql);
ps.setDouble(1, money);
ps.setInt(2, id);
ps.executeUpdate();
} finally {
//在数据访问层,不能关闭数据库连接,必须保持事务的各个原子操作是同一连接
JDBCUtils.closeStatement(null, ps);
}
}

  测试代码:

   @Test
public void testTransaction() {
Connection conn=null;
Dao dao=new Dao();
try {
conn=JDBCUtils.getConnection(); //获取数据库连接
conn.setAutoCommit(false); //组织事务自动提交
dao.updateBalance(conn, -100, 1); //原子操作1
dao.updateBalance(conn, +100, 2); //原子操作2
conn.commit(); //提交事务
} catch (Exception e) {
e.printStackTrace();
try {
conn.rollback(); //事务未完整执行成功,回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}

Java——事务的更多相关文章

  1. 转!!java事务的处理

    java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先前 ...

  2. 深入Java事务的原理与应用

    一.什么是JAVA事务    通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 ( ...

  3. java事务的类型——面试被问到

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 1.JDBC事务 JDBC 事务是用 Connection 对象控制的.JDBC Conne ...

  4. java事务管理

    一.什么是Java事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isol ...

  5. java事务的处理

    java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务. 如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先 ...

  6. 分布式事务(二)Java事务API(JTA)规范

    一.引子 既然出现了分布式场景(DTP模型), 大java也及时制定出一套规范来给各大应用服务器.数据库/mq等厂商使用,以方便管理互通--->JTA闪亮登场.JTA(Java Transact ...

  7. java事务 深入Java事务的原理与应用

    一.什么是JAVA事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (iso ...

  8. java 事务

    之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中和事务相关的内容,在阅读本文之前,希望读者对分布式有一定的了解. 关于事务的基础知识这里不再详细介绍,想要了解的同学可以在我的博客中阅读 ...

  9. Java事务管理之Spring+Hibernate

    环境与版本 除了上一篇中的hibernate的相关lib 外 Java事务管理之Hibernate 还需要加入Spring的lib 包和如下的一些依赖包 org.aopallianceorg.aspe ...

  10. java事务(三)

    java事务(三)——自己实现分布式事务 在上一篇<java事务(二)——本地事务>中已经提到了事务的类型,并对本地事务做了说明.而分布式事务是跨越多个数据源来对数据来进行访问和更新,在J ...

随机推荐

  1. java代码异常处理

    总结:运用throw和throws抛出异常,在哪一种情况下该怎么抛出异常.重要 package com.b; //异常中throwe和throws的用法 public class yz { publi ...

  2. Http服务端

    第一,使用node提供的http模块 var http=require('http'); 第二,创建一个服务器实例 通过http的createServer()方法. var server=http.c ...

  3. Solaris10 如何设置空闲ssh连接超时断开

    在ssh的配置文件中有2个参数可以控制空闲连接超时断开.这2个参数是ClientAliveCountMax和ClientAliveInterval. Solaris10上设置空闲ssh连接超时断开的方 ...

  4. Compare and Swap(CAS)

    CAS(Compare and Swap)是个原子操作.拿到一个新值后,CAS将其与内存中的值进行比较,若内存中的值和这个值不一样,则将这个值写入内存,否则,不做操作.在Java的 java.util ...

  5. SQLServer数据库中开启CDC导致事务日志空间被占满的原因

    SQLServer数据库中开启CDC导致事务日志空间被占满的原因 转载  2017-04-01   投稿:mrr    我要评论 这篇文章主要介绍了SQLServer数据库中开启CDC导致事务日志空间 ...

  6. Shiro权限框架简介

    http://blog.csdn.net/xiaoxian8023/article/details/17892041   Shiro权限框架简介 2014-01-05 23:51 3111人阅读 评论 ...

  7. matlab学习笔记(3)

    数据分析: 多项式: 多项式表示:p = [1 2 3 0]; //表示 1*x^3+2*x^2+3*x^1+0 ,系数从高次向低次项,0系数不能省略. roots函数:求解多项式的根.roots(p ...

  8. 『原』在Linux下反编译Android .apk文件 使用apktool dex2jar JD-eclipse

    一.使用apktool 将 apk反编译生成程序的源代码和图片.XML配置.语言资源等文件 具体步骤: (1)下载反编译工具包:apktool 官方的打不开 http://apktool.shouji ...

  9. SimpleDateFormat-多线程问题

    SimpleDateFormat-多线程问题: SimpleDateFormat类在多线程环境下中处理日期,极易出现日期转换错误的情况 import java.text.ParseException; ...

  10. 设置 PyCharm 软件中 Terminal 窗口 中启动的 python 交互命令的版本

    设置 PyCharm 软件中 Terminal 窗口 中启动的 python 交互命令的版本 python2 和 python3 有很大的不同,使用python2 编写的程序,如果使用python3 ...