`

java sql 关于事务操作的简介 (转)

阅读更多
本文介绍在Java中进行事务处理的方法,通过实例分别讲述了如何采用JavaBean、Ejb组件实现J2EE应用服务器支持的JDBC事务、JTA(Java Tran

本文介绍在Java中进行事务处理的方法,通过实例分别讲述了如何采用JavaBean、Ejb组件实现J2EE应用服务器支持的JDBC事务、JTA(Java Transaction API)事务

Java中的事务处理

  一般情况下,J2EE应用服务器支持JDBC事务、JTA(Java Transaction API)事务、容器管理事务。一般情况下,最好不要在程序中同时使用上述三种事务类型,比如在JTA事务中嵌套JDBC事务。第二方面,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。下面我们列举两种事务处理方式。

  1、JavaBean中使用JDBC方式进行事务处理
  在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个SQL语句组合成一个事务,要将auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不调用commit()方法,SQL语句不会得到事务确认。在最近一次commit()方法调用之后的所有SQL会在方法commit()调用时得到确认。

public int delete(int sID) {
 dbc = new DataBaseConnection();
 Connection con = dbc.getConnection();
 try {
  con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
  dbc.executeUpdate("delete from bylaw where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
  con.commit();//提交JDBC事务
  con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式
  dbc.close();
  return 1;
 }
 catch (Exception exc) {
  con.rollBack();//回滚JDBC事务
  exc.printStackTrace();
  dbc.close();
  return -1;
 }
}

  2、SessionBean中的JTA事务
  JTA 是事务服务的 J2EE 解决方案。本质上,它是描述事务接口(比如 UserTransaction 接口,开发人员直接使用该接口或者通过 J2EE 容器使用该接口来确保业务逻辑能够可靠地运行)的 J2EE 模型的一部分。JTA 具有的三个主要的接口分别是 UserTransaction 接口、TransactionManager 接口和 Transaction 接口。这些接口共享公共的事务操作,例如 commit() 和 rollback(), 但是也包含特殊的事务操作,例如 suspend(),resume() 和 enlist(),它们只出现在特定的接口上,以便在实现中允许一定程度的访问控制。例如,UserTransaction 能够执行事务划分和基本的事务操作,而 TransactionManager 能够执行上下文管理。

  应用程序可以调用UserTransaction.begin()方法开始一个事务,该事务与应用程序正在其中运行的当前线程相关联。底层的事务管理器实际处理线程与事务之间的关联。UserTransaction.commit()方法终止与当前线程关联的事务。UserTransaction.rollback()方法将放弃与当前线程关联的当前事务。

public int delete(int sID) {
 DataBaseConnection dbc = null;
 dbc = new DataBaseConnection();
 dbc.getConnection();
 UserTransaction transaction = sessionContext.getUserTransaction();//获得JTA事务
 try {
  transaction.begin(); //开始JTA事务
  dbc.executeUpdate("delete from bylaw where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
  transaction.commit(); //提交JTA事务
  dbc.close();
  return 1;
 }
 catch (Exception exc) {
  try {
   transaction.rollback();//JTA事务回滚
  }
  catch (Exception ex) {
   //JTA事务回滚出错处理
   ex.printStackTrace();
  }
  exc.printStackTrace();
  dbc.close();
  return -1;
 }
}
(二)事务简单例子

BEGIN TRANSACTION DeleteSupv
    --SQL语句
    IF @@error<>0
BEGIN
        ROLLBACK TRAN DeleteSupv
   GOTO on_error
END
    --SQL语句
    IF @@error<>0
BEGIN
        ROLLBACK TRAN DeleteSupv
   GOTO on_error
END
COMMIT TRAN DeleteSupv

RETURN 1
on_error:
    print 'Error occured'

(三)

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

JavaBean中使用JDBC方式进行事务处理

public int delete(int sID) {
dbc = new DataBaseConnection();
Connection con = dbc.getConnection();
try {
con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
dbc.executeUpdate("delete from xiao where ID=" + sID);
dbc.executeUpdate("delete from xiao_content where ID=" + sID);
dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID);
con.commit();//提交JDBC事务
con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式
dbc.close();
return 1;
}
catch (Exception exc) {
con.rollBack();//回滚JDBC事务
exc.printStackTrace();
dbc.close();
return -1;
}
}

     在数据库操作中,一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元。只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,就必须撤消整个事务。


例如在银行的转帐事务中,假定张三从自己的帐号上把1000元转到李四的帐号上,相关的sql语句如下:

update account set monery=monery-1000 where name='zhangsan'

update account set monery=monery+1000 where name='lisi'

这个两条语句必须作为一个完成的事务来处理。只有当两条都成功执行了,才能提交这个事务。如果有一句失败,整个事务必须撤消。


在connection类中提供了3个控制事务的方法:

(1) setAutoCommit(Boolean autoCommit):设置是否自动提交事务;

(2) commit();提交事务;

(3) rollback();撤消事务;

在jdbc api中,默认的情况为自动提交事务,也就是说,每一条对数据库的更新的sql语句代表一项事务,操作成功后,系统自动调用commit()来提交,否则将调用rollback()来撤消事务。

在jdbc api中,可以通过调用setAutoCommit(false) 来禁止自动提交事务。然后就可以把多条更新数据库的sql语句做为一个事务,在所有操作完成之后,调用commit()来进行整体提交。倘若其中一项 sql操作失败,就不会执行commit()方法,而是产生相应的sqlexception,此时就可以捕获异常代码块中调用rollback()方法撤 消事务。

 

分享到:
评论

相关推荐

    SQL转Java代码小工具

    关于“SQL转Java代码.exe”,这很可能是该工具的可执行文件,适用于Windows操作系统。用户只需运行这个文件,输入或导入多行SQL,然后工具会生成对应的Java代码片段,用户可以直接复制粘贴到自己的Java项目中。 在...

    JAVA操作SQL数据库

    "JAVA操作SQL数据库"这一主题涵盖了如何使用Java语言与各种SQL(结构化查询语言)数据库进行交互的知识点。以下是一些关键概念和步骤的详细说明: 1. **JDBC(Java Database Connectivity)**:JDBC是Java API,它...

    Java SQL server 数据库备份

    对于使用Java进行开发并且依赖于SQL Server作为数据库的企业来说,理解如何在Java环境中执行SQL Server数据库的备份至关重要。以下将详细介绍Java与SQL Server数据库备份相关的知识点。 1. **SQL Server备份类型**:...

    Java sql数据库api

    Java SQL API是Java编程语言中用于访问和操作关系型数据库的标准接口。它是Java Database Connectivity (JDBC)的一部分,允许开发者在Java程序中执行SQL语句,进行数据查询、插入、更新和删除等操作。JDBC提供了...

    JAVA sqlserver驱动.zip

    综上所述,"JAVA sqlserver驱动.zip"包含的是用于Java与SQL Server通信的JDBC驱动程序,它使得Java开发者能够高效、安全地访问和操作SQL Server数据库。正确配置和使用这些驱动,可以极大地提升Java应用程序的数据库...

    网上银行系统 java sql server 编程

    本项目是基于Java编程语言和SQL Server数据库实现的网上银行管理系统,旨在提供安全、高效的在线交易服务。下面将详细介绍该系统涉及的主要知识点。 1. **Java编程语言**: Java是一种跨平台的面向对象编程语言,...

    java操作xml和sql server 2008必备包(crimson jdom sqljdbc sqljdbc4)

    这些驱动程序使得Java应用程序能够通过JDBC(Java Database Connectivity)接口与SQL Server 2008进行通信,执行SQL查询,管理事务,以及进行其他数据库操作。开发者可以通过DataSource或DriverManager来建立数据库...

    JAVA+SQL实训报告--工资管理系统

    4. **事务处理**:在处理工资数据时,需要确保数据的一致性和完整性,因此,了解并正确使用SQL事务至关重要。 四、系统功能 1. **员工管理**:添加、删除和修改员工信息,包括基本信息和工资详情。 2. **工资计算**...

    JAVA连接sqlserver2008R2驱动sqljdbc4-3.0.jar

    在Java编程环境中,连接SQL Server 2008 R2...了解这些基本概念后,你就能成功地在Java应用中连接并操作SQL Server 2008 R2数据库了。记得在项目中正确配置类路径,确保`sqljdbc4-3.0.jar`可被加载到Java运行时环境。

    商品库存管理系统java+sql

    【商品库存管理系统java+sql】是一个面向初学者的项目,旨在帮助他们理解如何结合Java编程语言和MySQL数据库来实现一个简单的库存管理应用。这个系统的核心功能可能包括商品的添加、删除、查询以及库存的增减操作,...

    oracle 在java中的事务处理和异常回滚。

    在Java编程中,Oracle...总的来说,Oracle在Java中的事务处理和异常回滚是通过JDBC接口实现的,它保证了数据库操作的原子性、一致性、隔离性和持久性。理解并熟练掌握这些概念对于开发健壮的Java应用程序至关重要。

    java SQL接口

    总的来说,Java SQL接口和JDBC为Java开发者提供了强大的数据库操作能力,无论是简单的CRUD操作还是复杂的业务逻辑,都能轻松应对。同时,通过良好的编程实践和使用现代的JDBC连接池,可以实现高效、安全的数据库访问...

    java批量执行SQL

    ### Java批量执行SQL知识点解析 在Java开发过程中,经常需要与数据库进行交互,尤其是在处理大量数据时,如何高效地执行SQL语句变得尤为重要。本文将详细介绍如何利用Java进行批量SQL执行,包括其背景、实现原理、...

    java+sql.rar_SQL java_java s_java sql_java sql 简单_java.sql.

    本文将深入探讨如何使用Java和SQL进行数据库操作,以及JDBC编程技术。 首先,SQL(Structured Query Language)是用于管理关系数据库的标准语言,包括创建、查询、更新和删除数据等操作。Java与SQL的结合使得开发者...

    java提取并分析sqlserver的日志

    交易日志记录所有数据库的事务操作,而错误日志则存储系统启动、停止以及运行期间遇到的问题。 2. **日志文件位置**: 在Windows系统中,SQL Server错误日志通常位于`%ProgramFiles%\Microsoft SQL Server\MSSQL14...

    java连接sql2005包

    在数据库操作中,JSTL的 `&lt;sql&gt;` 标签库可以方便地执行SQL查询,而无需编写过多的Java脚本。尽管JSTL不是直接用于连接SQL Server,但它可以辅助Java程序进行数据操作,提升代码的可读性和可维护性。 `jstl.jar`文件...

    JAVA 连接sqlserver类 已封装好 & sqljdbc.jar

    在这个场景中,标题提到的"JAVA 连接sqlserver类 已封装好",指的是已经有一个预先编写好的Java类,它封装了与SQL Server数据库交互的基本操作,使得开发者可以更方便地进行数据库操作。 `sqljdbc.jar`是一个驱动包...

    java sql

    11. **异常处理**: 在Java中处理SQL操作时,需要捕获并处理`SQLException`,确保程序的健壮性。 12. **批量操作**: JDBC提供批量处理功能,允许一次性执行多条SQL语句,提高效率。 博客中的SQL文件(0.sql到10.sql...

    java 数据库操作,事务回滚

    java 应用程序操作数据库实例,若出现sql异常则事务回滚。

    java c/s sql srever oracle转换

    6. **事务管理**:Oracle和SQL Server在事务处理上的API可能会有所不同,需要确保Java代码中的事务控制逻辑适应新的数据库环境。 7. **连接池配置**:在Java应用中,通常会使用连接池来管理数据库连接。需要更新...

Global site tag (gtag.js) - Google Analytics