• 技术文章 >java >java基础

    java事务的类型有哪几个

    小妮浅浅小妮浅浅2021-01-19 14:39:12原创3913

    们说使用事务,可以同时处理程序中两种有关联的任务,在一定程序上也保证了程序处理的安全性。在了解了一些基础的事务后,进一步探讨事务的类型,可以分为:JDBC、JTA和容器事务。下面我们分别就事务中的这三种类型进行概念上的理解,并展示对应的实例使用。

    1.JDBC事务

    Connection 对象控制,JDBC 的 Connection 接口提供了两种事务模式:自动提交、手工提交。

     public void setAutoCommit(boolean)
     public boolean getAutoCommit()
     public void commit()
     public void rollback()

    JDBC 为使用 Java 进行数据库的事务操作提供了最基本的支持。可以将多个 SQL 语句放到同一个事务中,保证其 ACID 特性。

    涉及到多数据库的操作或者分布式场景,JDBC事务就无能为力了。

    2.JTA(Java Transaction API)事务

    JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。JTA允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。

    public void JtaTransfer() { 
            javax.transaction.UserTransaction tx = null;
            java.sql.Connection conn = null;
             try{ 
                 tx = (javax.transaction.UserTransaction) context.lookup("java:comp/UserTransaction");  //取得JTA事务,本例中是由Jboss容器管理
                 javax.sql.DataSource ds = (javax.sql.DataSource) context.lookup("java:/XAOracleDS");  //取得数据库连接池,必须有支持XA的数据库、驱动程序  
                 tx.begin();
                conn = ds.getConnection();
                 // 将自动提交设置为 false,
                 //若设置为 true 则数据库将会把每一次数据更新认定为一个事务并自动提交
                 conn.setAutoCommit(false);
                 stmt = conn.createStatement(); 
                 // 将 A 账户中的金额减少 500 
                 stmt.execute("\
                 update t_account set amount = amount - 500 where account_id = 'A'");
                 // 将 B 账户中的金额增加 500 
                 stmt.execute("\
                 update t_account set amount = amount + 500 where account_id = 'B'");
                 // 提交事务
                 tx.commit();
                 // 事务提交:转账的两步操作同时成功
             } catch(SQLException sqle){            
                 try{ 
                     // 发生异常,回滚在本事务中的操做
                  tx.rollback();
                     // 事务回滚:转账的两步操作完全撤销
                     stmt.close(); 
                     conn.close(); 
                 }catch(Exception ignore){ 
                 } 
                 sqle.printStackTrace(); 
             } 
         }

    3.容器事务

    容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。

    以上就是java事务的三种类型介绍,前两者都是比较常见的,关于容器事务这一点大家做一个知识的了解就可以了。看完本篇文章后,可以就其中的事务类型做一个尝试。

    专题推荐:java事务类型
    上一篇:java标识符的基础使用 下一篇:java声明式事务的三种方法

    相关文章推荐

    • java中int使用十六进制• CompletableFuture在java中的报错处理• java之json串转Map的整理• Java Vector和ArrayList的异同分析• java中mybatis和hibernate的总结• 分页处理java多线程的数据• java标识符的基础使用

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网