`
zhjump
  • 浏览: 10449 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

[8]jdbc事务和事务的保存点处理

    博客分类:
  • Java
阅读更多

[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事务的基本概念。JDBC支持四种事务隔离级别,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。每种级别都有不同的...

    JDBC事务管理的简单实现

    下面是关于JDBC事务管理的简单实现的知识点。 一、事务管理的必要性 在数据库编程中,事务管理是非常重要的一部分。它可以确保数据的一致性和完整性。事务管理可以防止数据的不一致和丢失,确保数据的安全和可靠性...

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

    **JDBC事务**主要针对单个数据库连接,由数据库管理系统(DBMS)自身管理事务。JDBC提供了`Connection`对象的`commit()`和`rollback()`方法用于提交和回滚事务。这是简单的单阶段提交,适用于单一数据源的情况。 **...

    JDBC事务管理.docx

    JDBC事务管理是数据库...总之,JDBC事务管理是确保数据库操作正确性和一致性的关键,通过理解和应用ACID原则以及适当的并发控制机制,开发人员可以有效地处理并发环境下的事务处理,保证系统的稳定性和数据的完整性。

    JDBC事务操作例子所需jar包

    在Java中,JDBC事务处理主要涉及以下几个关键概念: 1. **Connection对象**:它是与数据库的会话,通过该对象可以开启、提交和回滚事务。在连接池中获取到的Connection通常已经自动开启了事务,但如果没有,可以...

    JDBC事务控制--讲述如何控制JDBC事务

    ### JDBC事务控制详解 在数据库应用开发中,事务管理是一项重要的功能,它确保了一系列操作能够作为一个整体被正确地执行或回滚。Java Database Connectivity (JDBC) 是 Java 平台中用于连接数据库的标准 API,提供...

    JDBC事务管理项目

    本项目“JDBC事务管理项目”旨在教你如何在Java应用中使用JDBC来处理数据库事务,确保数据的一致性和完整性。 **事务的概念** 事务是数据库操作的基本单元,它包含了对数据库的一系列操作,这些操作要么全部成功,...

    spring jdbc 事务

    在描述中提到的博客链接(由于实际链接无法访问,这里无法提供具体细节),可能详细讲述了如何在Spring中配置和使用JDBC事务,包括示例代码和常见问题解决。在实际项目中,理解并正确应用这些事务管理机制对于保证...

    JDBC事务处理、提交、回滚。.docx

    1. **JDBC事务的基本概念** - **事务**:事务是数据库系统中执行的一系列操作的集合,这些操作要么全部成功,要么全部失败。事务具有四大特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)...

    JDBC的事务初探

    **JDBC事务初探** Java Database Connectivity(JDBC)是Java平台中用于与关系数据库进行交互的API。在处理数据库操作时,事务管理是至关重要的一个环节,它确保了数据的一致性和完整性。本篇文章将深入探讨JDBC中...

    jdbc入门、分页以及事务

    **JDBC事务** 事务是数据库操作的基本单元,确保数据的一致性和完整性。JDBC提供了对事务的支持。 1. **开启事务**: 通过`Connection`对象的`setAutoCommit(false)`方法关闭自动提交,从而手动控制事务的开始。 2...

    jdbc+spring+mysql事务理解和分析

    在Java开发中,使用JDBC、Spring和MySQL进行数据操作时,事务管理是非常关键的一环。事务确保了数据的完整性和一致性,尤其是在并发环境中。以下是对`jdbc+spring+mysql事务理解和分析`的详细说明: 1. **原子性...

    Java事务管理学习之JDBC详解

    Java事务管理学习之JDBC详解是Java事务管理学习的重要组成部分,文章详细介绍了Java事务管理学习之JDBC的相关知识点,包括事务的概念、特性、类型、JDBC事务管理等。 一、事务的概念 事务是数据库的逻辑工作单位,...

    在Java的JDBC使用中设置事务回滚的保存点的方法

    本文将详细介绍如何在JDBC中设置和管理事务的保存点。 首先,了解JDBC中的事务控制。在默认情况下,JDBC连接的自动提交模式是开启的,意味着每次SQL语句执行后都会立即提交。为了启用手动事务控制,需要调用`...

    Java中的事务处理

    2. **JDBC事务管理** - **手动提交与回滚**:通过Connection对象的commit()和rollback()方法来控制事务的开始、提交和回滚。 - **自动提交模式**:默认情况下,JDBC连接处于自动提交模式,每次SQL语句都会自动提交...

    Java事务处理总结[归类].pdf

    Java事务主要分为三种类型:JDBC事务、JTA(Java Transaction API)事务和容器事务。 1. JDBC事务是基于数据库连接(Connection对象)进行控制的。默认情况下,JDBC连接处于自动提交模式,每个SQL语句都默认作为一...

    JDBC事物应用源码文件

    通过`jdbc_demo`这样的源码文件,开发者可以学习到如何在实际项目中使用这些概念,从而更好地理解和掌握JDBC事务处理。实践中,开发者可以参考这些示例代码,结合具体的业务需求,编写自己的事务管理逻辑。

    java事务管理和事务分类

    JDBC事务局限于单个数据库连接,无法处理跨数据库的事务。 **JTA(Java Transaction API)事务**:JTA提供了一种更高级的事务管理,允许执行分布式事务,覆盖多个数据库。它需要一个支持X/Open XA协议的JDBC驱动,...

    day18-事务与连接池 3.jdbc中事务操作介绍

    在实际开发中,Spring框架提供了对JDBC事务管理的高级支持,通过声明式事务管理,开发者可以在XML配置或注解中定义事务边界,简化事务处理。例如,使用`@Transactional`注解可以声明一个方法为事务方法,Spring会...

Global site tag (gtag.js) - Google Analytics