引用
五、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中,可以通过Connection对象的`setAutoCommit(false)`禁用自动提交,然后手动调用`commit()`或`rollback()`来控制事务边界。 **JDBC2.0新特性** JDBC2.0引入了批处理(Batch Processing),允许一次性发送多...
4. **配置Transaction管理**:在`applicationContext.xml`中配置PlatformTransactionManager,选择合适的事务管理策略,如DataSourceTransactionManager(适用于JDBC)或HibernateTransactionManager(适用于...
JDBC (Java Database Connectivity) 是Java编程语言中用于与关系型数据库交互的一种标准接口,它提供了规范化的数据库访问方式。JDBC使得Java开发者能够编写数据库无关性的代码,从而实现跨平台的数据访问。在JDBC中...
在Java编程中,处理事务主要涉及JDBC(Java Database Connectivity)和JTA(Java Transaction API)。理解这些概念对于开发可靠的、高性能的数据库应用至关重要。 首先,让我们从事务的四大特性说起: 1. **原子性...
本篇文章将深入探讨JDBC的核心概念、主要组件以及如何在实际项目中使用它。 首先,理解JDBC的基础知识至关重要。JDBC提供了一组API,通过这些API,开发者可以连接到数据库,发送SQL查询,处理结果集,甚至进行事务...
JDBC是Java编程语言中用于与各种类型的数据库进行交互的标准接口。让我们详细了解一下这些文件以及它们在JDBC中的作用: 1. **classes12.jar**:这是Oracle公司提供的JDBC驱动程序的一部分,主要用于与Oracle数据库...
首先,我们来看JavaBean中如何使用JDBC进行事务处理。在JDBC中,默认情况下,每个单独的SQL语句都是在一个自动提交(auto-commit)的事务中执行的,这意味着每执行完一个SQL语句,数据库就会立即提交事务。如果想要...
在本课程"JAVAWEB-17:JDBC编程进阶2"中,我们将深入探讨Java Web开发中的JDBC(Java Database Connectivity)技术的高级用法。JDBC是Java平台的标准API,用于与各种数据库进行交互。在这个进阶部分,我们将重点关注...
在Spring框架中,通过其事务管理模块,将JDBC、JTA、JPA等不同的事务API进行了统一抽象,提供了简单易用的编程模型。开发者可以使用Spring的声明式事务管理,无需深入理解底层细节,就能方便地控制事务的边界。 JTA...
总结来说,这篇笔记介绍了Spring的编程式事务管理,包括使用PlatformTransactionManager接口,事务的ACID特性,以及如何在业务逻辑中正确地开始、提交和回滚事务。同时,结合“test_hibernate_1”文件,我们可以...
总结起来,Spring通过JdbcTemplate简化了JDBC操作,提供了一套强大的事务管理机制,包括声明式和编程式事务管理,使得开发者可以专注于业务逻辑,而不是底层的数据库操作和事务控制。在实际项目中,结合Spring的IoC...
在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一套标准API。它使得开发者能够使用统一的方式处理不同的数据库。事务管理是数据库操作中的关键部分,确保数据的一致性和完整性。...
在编程式事务管理中,通常使用`TransactionTemplate`,它简化了事务代码,避免了显式事务API的使用。 三、声明式事务管理 1. XML配置:在Spring的配置文件中,使用`<tx:advice>`定义事务处理规则,然后通过`...
总结,JDBC是Java开发中不可或缺的工具,理解和掌握其工作原理和最佳实践,能够帮助我们构建高效、可靠的数据库应用程序。通过学习JDBC与Java数据库编程,开发者可以更好地实现数据存取、事务控制以及数据库连接管理...
2. **Transaction Management**: Spring-JDBC支持声明式事务管理,允许开发者使用注解(如@Transactional)来控制事务的边界,无需手动调用commit()和rollback()。这提高了代码的可读性和可维护性。 3. **...
数据库基础与JDBC编程技术是IT领域中至关重要的部分,主要涉及如何管理和操作数据以及如何通过Java语言与数据库进行交互。下面将详细讲解这两个主题。 首先,我们来探讨数据库基础。数据库是一个组织和存储数据的...
**JDBC(Java Database Connectivity)**是Java编程语言中用于与数据库交互的一种接口规范,它由Sun Microsystems(现已被Oracle收购)开发并定义,是Java平台标准的一部分。JDBC提供了标准化的方法来连接、查询和...
在Java JDBC中,我们可以使用Connection对象的setAutoCommit(false)方法来关闭自动提交,然后手动控制事务的开始(startTransaction)、提交(commit)和回滚(rollback)。例如,在转账操作中,如果两个账户的扣款...
首先,JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一套标准API。它定义了一种规范,允许Java程序员通过编写Java代码来执行SQL语句,实现对数据库的读写操作。MySQL Connector/J...
Spring JDBC的主要目标是简化传统的JDBC编程模型,通过提供模板类和数据访问对象(DAO)支持,来处理数据库操作的繁琐过程,如连接管理、事务处理和异常转换等。这一版本3.0.5的发布,进一步优化了性能和稳定性。 ...