前言:
而今各位老铁们对“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的事务管理