`

JDBC总结05-JDBC 中使用 Transaction 编程(事务编程)

    博客分类:
  • JDBC
阅读更多
引用

五、JDBC 中使用 Transaction 编程(事务编程)
1. 事务是具备以下特征(ACID)的工作单元:
    原子性(Atomicity)—— 如果因故障而中断,则所有结果均被撤消;
    一致性(Consistency)—— 事务的结果保留不变;
    孤立性(Isolation)—— 中间状态对其它事务是不可见的;
    持久性(Durability)—— 已完成的事务结果上持久的。
原子操作,也就是不可分割的操作,必须一起成功一起失败。
2. 事务处理三步曲:事务是一个边界)
① connection.setAutoCommit(false);      //把自动提交关闭
② 正常的 DB 操作                           //若有一条 SQL 语句失败了,自动回滚
③ connection.commit()            //主动提交
   或 connection.rollback()      //主动回滚
  完整的代码片段:
 
try{
                                      //step① 把自动提交关闭
       con.setAutoCommit(false);
       Statement stm = con.createStatement();
       stm.executeUpdate("insert into person(id, name, age) values(520, 'X-Man', 18)");
       stm.executeUpdate("insert into Person(id, name, age) values(521, 'Super', 19)");
       //step② 正常的 DB 操作
                                                    //step③ 成功主动提交
       con.commit();
  } catch(SQLException e){
       try{
            con.rollback();
                                                         //step③ 失败则主动回滚
       } catch(Exception e){ e.printStackTrace(); }
  }

3. JDBC 事务并发产生的问题和事务隔离级别
JDBC 事务并发产生的问题:
① 脏读(Dirty Reads) 一个事务读取了另一个并行事务还未提交的数据。
② 不可重复读(UnPrpeatable Read) 一个事务再次读取之前的数据时,得到的数据不一
致,被另一个已提交的事务修改。
③ 幻读(Phantom Read) 一个事务重新执行一个查询,返回的记录中包含了因为其它最
近提交的事务而产生的新记录。
为了避免以上三种情况的出现,则采用
事务隔离级别:
TRANSACTION_NONE                                   不使用事务
TRANSACTION_READ_UNCOMMITTED                       可以读取未提交数据
                                                   可以避免脏读,不能够读取没提交的数据,
TRANSACTION_READ_COMMITTED                         最常用的隔离级别 大部分数据库的默认
                                                   隔离级别
TRANSACTION_REPEATABLE_READ                        可以避免脏读,重复读取
TRANSACTION_SERIALIZABLE                           可以避免脏读,重复读取和幻读,                  (事务串
                                                   行化)会降低数据库效率
以 上 的 五 个 事 务 隔 离 级 别 都 是 在 Connection 类 中 定 义 的 静 态 常 量 , 使 用
setTransactionIsolation(int level) 方法可以设置事务隔离级别。
比如:con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JDBC---初学者入门

    在JDBC中,可以通过Connection对象的`setAutoCommit(false)`禁用自动提交,然后手动调用`commit()`或`rollback()`来控制事务边界。 **JDBC2.0新特性** JDBC2.0引入了批处理(Batch Processing),允许一次性发送多...

    spring-hibernate-maven-transaction整合

    4. **配置Transaction管理**:在`applicationContext.xml`中配置PlatformTransactionManager,选择合适的事务管理策略,如DataSourceTransactionManager(适用于JDBC)或HibernateTransactionManager(适用于...

    JDBC & Transaction 总结整理

    JDBC (Java Database Connectivity) 是Java编程语言中用于与关系型数据库交互的一种标准接口,它提供了规范化的数据库访问方式。JDBC使得Java开发者能够编写数据库无关性的代码,从而实现跨平台的数据访问。在JDBC中...

    JDBC事务 JTA事务 传播特性 隔离级别

    在Java编程中,处理事务主要涉及JDBC(Java Database Connectivity)和JTA(Java Transaction API)。理解这些概念对于开发可靠的、高性能的数据库应用至关重要。 首先,让我们从事务的四大特性说起: 1. **原子性...

    JDBC-Java数据库编程

    本篇文章将深入探讨JDBC的核心概念、主要组件以及如何在实际项目中使用它。 首先,理解JDBC的基础知识至关重要。JDBC提供了一组API,通过这些API,开发者可以连接到数据库,发送SQL查询,处理结果集,甚至进行事务...

    jdbc-connector.rar

    JDBC是Java编程语言中用于与各种类型的数据库进行交互的标准接口。让我们详细了解一下这些文件以及它们在JDBC中的作用: 1. **classes12.jar**:这是Oracle公司提供的JDBC驱动程序的一部分,主要用于与Oracle数据库...

    JDBC事务处理机制探秘

    首先,我们来看JavaBean中如何使用JDBC进行事务处理。在JDBC中,默认情况下,每个单独的SQL语句都是在一个自动提交(auto-commit)的事务中执行的,这意味着每执行完一个SQL语句,数据库就会立即提交事务。如果想要...

    JAVAWEB-17:JDBC编程进阶2

    在本课程"JAVAWEB-17:JDBC编程进阶2"中,我们将深入探讨Java Web开发中的JDBC(Java Database Connectivity)技术的高级用法。JDBC是Java平台的标准API,用于与各种数据库进行交互。在这个进阶部分,我们将重点关注...

    spring学习笔记(十五)-编程式事务例子

    总结来说,这篇笔记介绍了Spring的编程式事务管理,包括使用PlatformTransactionManager接口,事务的ACID特性,以及如何在业务逻辑中正确地开始、提交和回滚事务。同时,结合“test_hibernate_1”文件,我们可以...

    Spring集成的jdbc编码和事务管理

    总结起来,Spring通过JdbcTemplate简化了JDBC操作,提供了一套强大的事务管理机制,包括声明式和编程式事务管理,使得开发者可以专注于业务逻辑,而不是底层的数据库操作和事务控制。在实际项目中,结合Spring的IoC...

    jdbc连接数据库事务工厂模式

    在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一套标准API。它使得开发者能够使用统一的方式处理不同的数据库。事务管理是数据库操作中的关键部分,确保数据的一致性和完整性。...

    spring-transaction.jar.zip

    在编程式事务管理中,通常使用`TransactionTemplate`,它简化了事务代码,避免了显式事务API的使用。 三、声明式事务管理 1. XML配置:在Spring的配置文件中,使用`<tx:advice>`定义事务处理规则,然后通过`...

    JDBC与Java数据库编程

    总结,JDBC是Java开发中不可或缺的工具,理解和掌握其工作原理和最佳实践,能够帮助我们构建高效、可靠的数据库应用程序。通过学习JDBC与Java数据库编程,开发者可以更好地实现数据存取、事务控制以及数据库连接管理...

    Spring-JDBC,带一小例子

    2. **Transaction Management**: Spring-JDBC支持声明式事务管理,允许开发者使用注解(如@Transactional)来控制事务的边界,无需手动调用commit()和rollback()。这提高了代码的可读性和可维护性。 3. **...

    数据库基础与JDBC编程技术.

    数据库基础与JDBC编程技术是IT领域中至关重要的部分,主要涉及如何管理和操作数据以及如何通过Java语言与数据库进行交互。下面将详细讲解这两个主题。 首先,我们来探讨数据库基础。数据库是一个组织和存储数据的...

    Java jdbc三层及事务(转账案例)

    在Java JDBC中,我们可以使用Connection对象的setAutoCommit(false)方法来关闭自动提交,然后手动控制事务的开始(startTransaction)、提交(commit)和回滚(rollback)。例如,在转账操作中,如果两个账户的扣款...

    mysql-connector-j-8.4.0.jar.rar

    首先,JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一套标准API。它定义了一种规范,允许Java程序员通过编写Java代码来执行SQL语句,实现对数据库的读写操作。MySQL Connector/J...

    spring.jdbc-3.0.5.jar

    Spring JDBC的主要目标是简化传统的JDBC编程模型,通过提供模板类和数据访问对象(DAO)支持,来处理数据库操作的繁琐过程,如连接管理、事务处理和异常转换等。这一版本3.0.5的发布,进一步优化了性能和稳定性。 ...

    jdbc api数据库编程实作教材

    1. **JDBC批注(JDBC Annotation)**:在Java 7中引入,允许在SQL字符串中使用批注,简化复杂查询。 2. **RowSet接口**:支持离线数据操作,提供了更灵活的数据处理方式。 本教材将通过实例详述以上知识点,并指导...

    JDBC-doc 官方文档

    **JDBC(Java Database Connectivity)**是Java编程语言中用于与数据库交互的一种接口规范,它由Sun Microsystems(现已被Oracle收购)开发并定义,是Java平台标准的一部分。JDBC提供了标准化的方法来连接、查询和...

Global site tag (gtag.js) - Google Analytics