Java 中的事务管理是什么?

在本文开始前,先给大家分享几个好用的IDEA激活码

这里提供几个最新的激活码,有需要的朋友可以试试,先到先用:

2022Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新)

2022Pycharm激活码,Pycharm稳定专属激活码(持续更新)

2022Webstorm激活码,Webstorm稳定专属激活码(持续更新)

2022Phpstorm激活码,Phpstorm稳定专属激活码(持续更新)

2022Goland激活码,Goland稳定专属激活码(持续更新)

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

(0)
上一篇 2022年10月16日 下午8:14
下一篇 2022年10月17日 下午2:49

相关推荐

  • 前端面试题汇总大全(含答案)– 持续更新

    下载链接:https://pan.baidu.com/s/1fnheNuxO5utdsWwKgaUX2g?pwd=1234提取码:1234 在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和202…

    2023年4月11日
    00
  • 深入了解 Node.js

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2022年12月17日
    00
  • IntelliJ IDEA:在一个工作区中运行多个项目(微服务)

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年3月8日
    00
  • Spring Boot 2.0 — 项目结构和最佳实践(第 2 部分)

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年4月6日
    00
  • Java EE 的未来和各种 Java 9 花絮

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年3月22日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注