[8]jdbc事务和事务的保存点处理
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TxTest { /** * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { test(); } static void test() throws SQLException { Connection conn = null; Statement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); conn.setAutoCommit(false);//start transaction; conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);//设置隔离级别 select @@tx_isolation; mysql查事务隔离级别 st = conn.createStatement(); String sql = "update user set money=money-10 where id=1"; st.executeUpdate(sql); sql = "select money from user where id=2"; rs = st.executeQuery(sql); float money = 0.0f; if (rs.next()) { money = rs.getFloat("money"); } if (money > 400) throw new RuntimeException("已经超过最大值!"); sql = "update user set money=money+10 where id=2"; st.executeUpdate(sql); conn.commit(); } catch (SQLException e) { if (conn != null) conn.rollback(); throw e; } finally { JdbcUtils.free(rs, st, conn); } } }
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Savepoint; import java.sql.Statement; public class SavePointTest { /** * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { test(); } static void test() throws SQLException { Connection conn = null; Statement st = null; ResultSet rs = null; Savepoint sp = null; try { conn = JdbcUtils.getConnection(); conn.setAutoCommit(false); st = conn.createStatement(); String sql = "update user set money=money-10 where id=1"; st.executeUpdate(sql); sp = conn.setSavepoint();//设置保存点 sql = "update user set money=money-10 where id=3"; st.executeUpdate(sql); sql = "select money from user where id=2"; rs = st.executeQuery(sql); float money = 0.0f; if (rs.next()) { money = rs.getFloat("money"); } if (money > 300) throw new RuntimeException("已经超过最大值!"); sql = "update user set money=money+10 where id=2"; st.executeUpdate(sql); conn.commit(); } catch (RuntimeException e) { if (conn != null && sp != null) { conn.rollback(sp); conn.commit(); } throw e; } catch (SQLException e) { if (conn != null) conn.rollback(); throw e; } finally { JdbcUtils.free(rs, st, conn); } } }
相关推荐
首先,我们需要理解JDBC事务的基本概念。JDBC支持四种事务隔离级别,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。每种级别都有不同的...
下面是关于JDBC事务管理的简单实现的知识点。 一、事务管理的必要性 在数据库编程中,事务管理是非常重要的一部分。它可以确保数据的一致性和完整性。事务管理可以防止数据的不一致和丢失,确保数据的安全和可靠性...
**JDBC事务**主要针对单个数据库连接,由数据库管理系统(DBMS)自身管理事务。JDBC提供了`Connection`对象的`commit()`和`rollback()`方法用于提交和回滚事务。这是简单的单阶段提交,适用于单一数据源的情况。 **...
JDBC事务管理是数据库...总之,JDBC事务管理是确保数据库操作正确性和一致性的关键,通过理解和应用ACID原则以及适当的并发控制机制,开发人员可以有效地处理并发环境下的事务处理,保证系统的稳定性和数据的完整性。
在Java中,JDBC事务处理主要涉及以下几个关键概念: 1. **Connection对象**:它是与数据库的会话,通过该对象可以开启、提交和回滚事务。在连接池中获取到的Connection通常已经自动开启了事务,但如果没有,可以...
### JDBC事务控制详解 在数据库应用开发中,事务管理是一项重要的功能,它确保了一系列操作能够作为一个整体被正确地执行或回滚。Java Database Connectivity (JDBC) 是 Java 平台中用于连接数据库的标准 API,提供...
本项目“JDBC事务管理项目”旨在教你如何在Java应用中使用JDBC来处理数据库事务,确保数据的一致性和完整性。 **事务的概念** 事务是数据库操作的基本单元,它包含了对数据库的一系列操作,这些操作要么全部成功,...
在描述中提到的博客链接(由于实际链接无法访问,这里无法提供具体细节),可能详细讲述了如何在Spring中配置和使用JDBC事务,包括示例代码和常见问题解决。在实际项目中,理解并正确应用这些事务管理机制对于保证...
1. **JDBC事务的基本概念** - **事务**:事务是数据库系统中执行的一系列操作的集合,这些操作要么全部成功,要么全部失败。事务具有四大特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)...
**JDBC事务初探** Java Database Connectivity(JDBC)是Java平台中用于与关系数据库进行交互的API。在处理数据库操作时,事务管理是至关重要的一个环节,它确保了数据的一致性和完整性。本篇文章将深入探讨JDBC中...
**JDBC事务** 事务是数据库操作的基本单元,确保数据的一致性和完整性。JDBC提供了对事务的支持。 1. **开启事务**: 通过`Connection`对象的`setAutoCommit(false)`方法关闭自动提交,从而手动控制事务的开始。 2...
在Java开发中,使用JDBC、Spring和MySQL进行数据操作时,事务管理是非常关键的一环。事务确保了数据的完整性和一致性,尤其是在并发环境中。以下是对`jdbc+spring+mysql事务理解和分析`的详细说明: 1. **原子性...
Java事务管理学习之JDBC详解是Java事务管理学习的重要组成部分,文章详细介绍了Java事务管理学习之JDBC的相关知识点,包括事务的概念、特性、类型、JDBC事务管理等。 一、事务的概念 事务是数据库的逻辑工作单位,...
本文将详细介绍如何在JDBC中设置和管理事务的保存点。 首先,了解JDBC中的事务控制。在默认情况下,JDBC连接的自动提交模式是开启的,意味着每次SQL语句执行后都会立即提交。为了启用手动事务控制,需要调用`...
2. **JDBC事务管理** - **手动提交与回滚**:通过Connection对象的commit()和rollback()方法来控制事务的开始、提交和回滚。 - **自动提交模式**:默认情况下,JDBC连接处于自动提交模式,每次SQL语句都会自动提交...
Java事务主要分为三种类型:JDBC事务、JTA(Java Transaction API)事务和容器事务。 1. JDBC事务是基于数据库连接(Connection对象)进行控制的。默认情况下,JDBC连接处于自动提交模式,每个SQL语句都默认作为一...
通过`jdbc_demo`这样的源码文件,开发者可以学习到如何在实际项目中使用这些概念,从而更好地理解和掌握JDBC事务处理。实践中,开发者可以参考这些示例代码,结合具体的业务需求,编写自己的事务管理逻辑。
JDBC事务局限于单个数据库连接,无法处理跨数据库的事务。 **JTA(Java Transaction API)事务**:JTA提供了一种更高级的事务管理,允许执行分布式事务,覆盖多个数据库。它需要一个支持X/Open XA协议的JDBC驱动,...
在实际开发中,Spring框架提供了对JDBC事务管理的高级支持,通过声明式事务管理,开发者可以在XML配置或注解中定义事务边界,简化事务处理。例如,使用`@Transactional`注解可以声明一个方法为事务方法,Spring会...