当前位置:首页 » 编程语言 » java事务

java事务

发布时间: 2022-01-25 16:59:28

‘壹’ java 事务

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;
}
}

‘贰’ java中什么是事务

一、什么是Java事务


通常的观念认为,事务仅与数据库相关。
事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性
(isolation)和持久性(rability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示

当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持
久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。
既然事务的概念从数据库而来,那Java事务是什么?之间有什么联系?
实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。


二、为什么需要事务


事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。具一个简单例子:比如银行转帐业务,账户A要将自己账户上的1000元
转到B账户下面,A账户余额首先要减去1000元,然后B账户要增加1000元。假如在中间网络出现了问题,A账户减去1000元已经结束,B因为网络中

断而操作失败,那么整个业务失败,必须做出控制,要求A账户转帐业务撤销。这才能保证业务的正确性,完成这个操走就需要事务,将A账户资金减少和B账户资
金增加方到一个事务里面,要么全部执行成功,要么操作全部撤销,这样就保持了数据的安全性。

‘叁’ 面试题 java什么叫事务,事务有什么用

事务你可以去看概念,我给你说下简单理解。你去斗鱼送礼物,扣了你的鱼丸给主播送了礼物,这俩操作必须是绑定在一起的,不然单个任何一个完成了另外一个没完成都会出问题。对到数据库的操作就是,你花钱,买了礼物,礼物送出去。前面两个步骤就是一个事物,花钱买-礼物发到你库存。然后这东西肯定要写到库里。这么说明白了吧,同样送礼物这个,从你的库存拿走,送给主播,也必须是一致的,必须一起完成。面试时候就照着这个意思大概的发挥吧。
另外,真去面试,你别张嘴就xx概念,什么这个性,那个性,干了几年业务的我估计没几个能真记住这些,你就大致按照自己的想法和理解说说。直接背概念十个有九个会被当培训班出来的,面试不过或者被压工资都是寻常的事。

‘肆’ java中的事务

如果你用Spring框架,Spring中可以实现事务管理,在spring 配置文件中配置事务管理器,也可以使用Spring注解式事务,在方法上加上@Transactional注解。
@Transactional
public void save() {
//你的代码逻辑

}
如果没有使用Spring框架,可以用JDBC处理事务,如下:
try{
con.setAutoCommit(false);//开启事务 ......
con.commit();//try的最后提交事务
} catch() {
con.rollback();//回滚事务
}

‘伍’ java 什么情况下需要事务

Java事务控制是构建J2EE应用不可缺少的一部分,合理选择应用何种事务对整个应用系统来说至关重要。一般说来,在单个JDBC 连接连接的情况下可以选择JDBC事务,在跨多个连接或者数据库情况下,需要选择使用JTA事务,如果用到了EJB,则可以考虑使用EJB容器事务。

‘陆’ java事务相关

Java中的事务处理

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

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

publicintdelete(intsID){
dbc=newDataBaseConnection();
Connectioncon=dbc.getConnection();
try{
con.setAutoCommit(false);//更改JDBC事务的默认提交方式
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
con.commit();//提交JDBC事务
con.setAutoCommit(true);//恢复JDBC事务的默认提交方式
dbc.close();
return1;
}
catch(Exceptionexc){
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()方法将放弃与当前线程关联的当前事务。

publicintdelete(intsID){
DataBaseConnectiondbc=null;
dbc=newDataBaseConnection();
dbc.getConnection();
UserTransactiontransaction=sessionContext.getUserTransaction();//获得JTA事务
try{
transaction.begin();//开始JTA事务
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
transaction.commit();//提交JTA事务
dbc.close();
return1;
}
catch(Exceptionexc){
try{
transaction.rollback();//JTA事务回滚
}
catch(Exceptionex){
//JTA事务回滚出错处理
ex.printStackTrace();
}
exc.printStackTrace();
dbc.close();
return-1;
}
}

‘柒’ 事务是什么在java中如何手工执行事务

举个例子,银行转账就是一个事物:从A账户减去金额,吧该金额转到B账户中。吧所有操作完成并且数据同步到数据库中,事物才栓完成。但是数据库操作过程中可能发生错误,其中一个操作失败,就会造成A+B账户金额与操作前的有出入,当发生错误后要取消操作(数据库的事物回滚),保证数据的一致性。

手工执行事物:
1、关闭数据库自动提交,
2、数据库操作完成后如果出错:回滚;没有错误:提交
3、记得关闭数据库连接

‘捌’ java里,怎么写事务控制

Java中为了控制事务的一致性,会使用插入回滚点、callback方法,保证数据不被篡改,示例如下:
public String delete(String id) {
String ID = id;
db = new getConnection();
Connection con = db.getConnection();
try {
con.setAutoCommit(false);
db.executeUpdate("delete from helloworld where ID=" + ID); //更新操作1
db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3
con.commit();//提交JDBC事务
con.setAutoCommit(true);
db.close();
return “success”;
}
catch (Exception e) {
con.rollBack();//回滚JDBC事务
e.printStackTrace();
db.close();
return “fail”;
}
}

‘玖’ java的事务处理

把错误原因贴出来吧。而且你的这段代码本身存在编译的问题,变量conn是在try{}中定义的,在catch(){}块中根本就没有这个变量,编译能通过吗?

‘拾’ java 如何建立事务 都有哪些方法

如果是用jdbc 上面beginTransaction 所有操作执行完后 commit 用 try catch 包起来 catch到异常 rollback spring 用注解就可以

热点内容
数据库第一章 发布:2024-11-15 22:27:07 浏览:592
测试php性能工具 发布:2024-11-15 22:19:37 浏览:579
安卓手机怎么给王者荣耀差评 发布:2024-11-15 22:16:47 浏览:269
c调用python返回 发布:2024-11-15 22:14:23 浏览:942
优酷无法上传高清视频 发布:2024-11-15 22:13:13 浏览:732
源码仓 发布:2024-11-15 22:07:29 浏览:721
极路由外网访问 发布:2024-11-15 21:49:56 浏览:489
lispc语言 发布:2024-11-15 21:45:32 浏览:850
linux误删除目录恢复 发布:2024-11-15 21:41:13 浏览:286
手机密码忘了怎么修改 发布:2024-11-15 21:40:04 浏览:335