龙空技术网

什么是Java中的事务管理?

一个即将退役的码农 380

前言:

而今各位老铁们对“java的事务管理”可能比较看重,我们都需要了解一些“java的事务管理”的相关资讯。那么小编同时在网络上汇集了一些有关“java的事务管理””的相关知识,希望朋友们能喜欢,各位老铁们一起来了解一下吧!

在文章中,我们将通过示例讨论Java中的事务管理。但是在讨论事务管理之前,我们应该知道什么是事务。因此,下面是一些关于事务的要点,以便更好地理解:

事务是程序执行的一段,它访问并可以更改不同的数据片段。一致的数据库必须对事务可见。在事务执行不一致期间,数据库可能会暂时不可用。数据库在事务成功完成(提交)后更新,并且必须保持不变。事务对数据库的修改在提交时完成。多个事务可以同时运行。有两个关键挑战需要解决:许多类型的故障,包括硬件问题和系统崩溃。许多事务的执行同时发生。交易类型

每个SQL查询都将被视为 JDBC中事务。使用JDBC创建的数据库连接将在自动提交模式下运行(自动提交值为TRUE)。SQL语句将在执行时自动提交。

有时,我们可能希望在多执行几次之后提交事务SQL陈述式 执行。此时必须将auto-commit变量更改为False。它可以防止在运行所有查询之前提交数据。如果发生事务异常,我们可以回滚()修改并还原原始状态。使用 ACID特征,事务管理就能得到恰当的描述。

ACID属性

事务处理是程序执行段 数据库系统必须确保以下几点,以保护数据完整性:

原子性: 事务的所有操作要么都在数据库中正确表示,要么都没有正确表示。事务管理组件使数据库保持最新。

一致性:当一个事务被隔离执行时,数据库的一致性得以保持。这属于应用程序员的权限范围。

隔离度: 事务必须不注意同时运行的任何其他事务,即使许多事务可以同时执行。其他并发进行的事务必须看不到中间事务的结果。换句话说,对于每对事务Ti和Tj,Ti发现Tj在Ti开始之前完成了执行,或者Tj在Ti完成之后开始执行。并发控制管理器控制它。

耐用性: 当交易成功完成后,即使系统出现问题,数据库也会继续更新。作为康复协调员,您有责任这样做。

示例:

从账户A向账户B转账50美元的交易:

1.read(A)

2. A:= A - 20

3.写(A)

4.read(B)

5. B:= B + 20

6.写(B)

Atomicity原子性要求 - 如果事务在第三步之后但在第六步之前失败,系统必须确保数据库尚未更新。因此,将出现不一致。

Consistency一致性要求 - 一致性的条件是,当交易完成时,A和B的总和保持不变。

Isolation隔离要求 - 如果允许另一个事务在步骤3和6之间访问部分修改的数据库,则它将遇到不一致的数据库(A和B的总和将低于它应该的值)。通过串行地或一个接一个地处理事务,可以快速地确保隔离。

Durability耐久性要求 - 由事务进行的数据库更改必须承受失败,直到用户被通知事务已经完成(即,$20已经被转移)。

交易状态

Active(活动的): Active是起始状态;在执行事务的同时维护它。

Partially Committed(部分提交): 在最后一个语句完成后,事务被部分提交。

Failed(未通过): 在意识到常规执行不再可能之后,

Aborted(已中止): 该事务将回滚,数据库将返回到事务启动前的状态。

中止后,有两个选项:

仅当没有内部逻辑错误时,才能重新启动事务。

终止:终止交易。已提交:成功完成后,即已提交。

事务处理管理中的前三个角色如下所示:

Commit(确认) 我们希望在数据库中的更改在SQL陈述式 已执行。调用commit()函数是必要的。提交通常是指对数据库进行永久性更改。这些更改不能撤消或撤销。但是,我们可以修改数据库数据。Rollback(回滚):Rollback会将所有的修改回复到最近一次的提交或指定的储存点。我们有时候会想要回复修改。例如,在单一巢状查询中,一个部分已经正确执行,而另一个部分却产生错误。如果此时发生例外状况,而我们想要回复第一个部分所做的修改,我们应该使用Rollback()函数。Savepoint(储存点):储存点可让您在交易中建立检查点,并让您倒回至特定的储存点。一旦确认或倒回交易,为其建立的所有储存点都会立即删除,变成无用。事务管理技术

五个技巧管理交易 由连接接口提供。它们是:

1. setAutoCommit()方法

默认情况下,AutoCommit设置为TRUE。SQL语句将在执行时自动提交。我们可以使用setAutoCommit()函数将该值设置为AutoCommit。

2. Commit()方法

使用commit方法提交数据。commit是在执行SQL查询()之后使用的术语。SQL语句所做的修改将被提交。

语法:

con.commit();

3. Rollback()方法

在最后一次提交之前,可以使用rollback过程撤消修改。当SQL语句正在执行时,如果出现问题或异常。可以对事务执行rollback()。

语法:

con.rollback();

4. setSavepoint()方法

由于有了保存点,您可以更好地控制事务处理。在事务处理(SQL语句的集合)()中建立保存点时,您可以使用rollback()函数撤消保存点之前或之后所做的任何更改。可以使用setSavepoint()函数创建新的保存点。

5. releaseSavepoint()方法

使用它删除生成的保存点。

项目示例代码:

import java.io.*;

import java.util.*;

import java.sql.*;

class TransactionManagement

{

public static void main(String[] args) throws Exception {

Connection connection = null;

Statement statement = null;

try {

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/user", "root","123456");

connection.setAutoCommit(false);

statement = connection.createStatement();

statement.executeUpdate("insert person values ('1','USA','JACK')")

connection.commit();

System.out.println("Transaction committed Successfully.");

statement.close();

connection.close();

} catch (Exception e) {

e.printStackTrace();

connection.rollback();

}}}

标签: #java的事务管理