在本文开始前,先给大家分享几个好用的IDEA激活码
这里提供几个最新的激活码,有需要的朋友可以试试,先到先用:
2022Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新)
2022Pycharm激活码,Pycharm稳定专属激活码(持续更新)
2022Webstorm激活码,Webstorm稳定专属激活码(持续更新)
Java中的事务管理
在本教程中,我们将使用示例讨论 Java 中的事务管理。但在转向事务管理之前,我们应该知道什么是事务。因此,以下是有关交易的一些要点,以便更好地理解:
- 事务是程序执行的一部分,它访问并可以更改不同的数据。
- 一致的数据库必须对事务可见。
- 事务执行期间数据库可能会短暂不可用不一致。
- 事务成功完成(提交)后数据库会更新,并且必须保持不变。
- 事务对数据库的修改在提交时完成。
- 多个事务可以同时运行。
- 有两个关键挑战需要解决:
- 许多类型的故障,包括硬件问题和系统崩溃。
- 许多事务的执行同时发生。
交易类型
在 JDBC 中,每个 SQL 查询都将被视为一个 事务。使用 JDBC 创建的数据库连接将以自动提交模式运行(自动提交值为 TRUE)。SQL 语句将在执行时自动提交。
有时,我们可能希望在执行了更多SQL 语句后提交事务。此时必须将自动提交变量更改为 False。它可以防止在所有查询运行之前提交数据。如果发生事务异常,我们可能会回滚() 修改并恢复原始状态。使用 ACID 特性,可以恰当地描述事务管理。
酸性质
事务是程序执行的一部分,它访问并可能更改不同的数据。数据库系统必须确保以下内容以保护数据完整性:
原子性:要么所有事务的操作都在数据库中正确表示,要么都没有。事务管理组件使其保持最新状态。
一致性:当一个事务被隔离执行时,数据库的一致性得以保持。它属于应用程序程序员的职权范围。
隔离:一个事务必须忽略同时运行的任何其他事务,即使许多事务可能同时执行。其他同时进行的事务不得看到中间事务的结果。换句话说,对于每对事务 Ti 和 Tj,Ti 感知到 Tj 在 Ti 开始之前完成执行,或者 Tj 在 Ti 完成之后开始执行。并发控制管理器控制它。
持久性:当事务成功通过时,即使存在系统问题和数据库更新,所做的修改也会继续。作为康复协调员,您有责任这样做。
例子:
Transaction to transfer $50 from account A to account B:
1.read(A)
2. A:= A – 20
3.write(A)
4.read(B)
5. B := B + 20
6.write(B)
原子性要求——如果事务在第 3 步之后但在第 6 步之前失败,则系统必须确保数据库尚未更新。结果,否则,将出现不一致。
一致性要求 – 一致性的条件是当事务完成时,A 和 B 的总数保持不变。
隔离要求 – 如果在第 3 步和第 6 步之间允许另一个事务访问部分修改的数据库,则会遇到不一致的数据库(A 和 B 的总和会低于应有的值)。通过串行或一个接一个地处理事务,可以快速确保隔离。
持久性要求 – 事务所做的数据库更改必须经受失败,直到用户被告知事务已完成(即,20 美元已被转移)。
交易状态
- Active:Active为起始状态;它在事务执行时被维护。
- 部分提交:在最后一条语句完成后,事务部分提交。
- 失败:意识到常规执行不再可能。
- Aborted:事务回滚,数据库恢复到事务启动前的状态。
中止后,有两种选择:
只有在没有内部逻辑错误的情况下才能重新启动事务。
1. 终止:终止交易。
2. 提交:成功完成后,提交。
下面列出了事务管理中的前三个角色。如下:
1. 提交:一旦SQL 语句执行完毕,我们希望使数据库中的更改永久化。调用 commit() 函数是必要的。提交通常是指对数据库进行永久性更改。修改不能撤销或撤销。但是,我们有能力修改数据库数据。
2. 回滚:回滚将所有修改反转到最近的提交或指定的保存点。我们有时可能希望扭转这些修改。例如,在单个嵌套查询中,一部分已正确运行,而另一部分已产生错误。如果此时发生异常并且我们希望反转第一部分所做的修改,我们应该使用 Rollback() 函数。
3. 保存点:保存点允许在事务中创建检查点并允许回滚到特定保存点。一旦提交或回滚事务,为其创建的所有保存点都会立即删除并变得无用。
事务管理技术
连接接口提供了五种管理事务的技术。他们是:
1. setAutoCommit() 方法
AutoCommit 设置默认设置为 TRUE。SQL 语句将在执行时自动提交。我们可以使用 setAutoCommit() 函数将值设置为 AutoCommit。
2. Commit() 方法
使用 commit 方法提交数据。提交是 SQL 查询执行后使用的术语 ()。SQL 语句所做的修改将被提交。
句法:
con.commit();
3. Rollback() 方法
在最后一次提交之前,可以使用回滚过程撤消修改。在执行 SQL 语句时,是否有问题或异常。事务可以是rollback()。
句法:
con.rollback();
4. setSavepoint() 方法
借助 Savepoint,您可以更好地控制交易。当您在事务(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();
}}}
发布者:admin,转转请注明出处:https://www.ajihuo.com/soft/5016.html