`
zhjump
  • 浏览: 9738 次
  • 性别: 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事务的保存点处理

    NULL 博文链接:https://liaoliu51.iteye.com/blog/603826

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

    主要介绍了在Java的JDBC使用中设置事务回滚的保存点的方法,JDBC是Java用于连接各种数据库的API,需要的朋友可以参考下

    你不知道的JDBC高级应用

    1.批处理:对数据库的CRUD速度会有质...7.事务:设定事务的保存点,可以把事务隔离. crud c:create r:read u:update d:delete JTA 分布式事务 跨数据库的事务 JNDI TomCat 方便分布式处理 dbcp JDBC连接池 ............

    JDBCPool.java

    JDBC连接池 原子性:最小的单元,如果一个是失败了,则一切的操作将全部失败。 一致性:如果事务出现错误,则...持久性:当一个系统崩溃时,一个事务依然可以提交,当事务完成后,操作结果保存在磁盘中,不会被回滚

    Java_JDBC由浅入深

    8.4 设置保存点 55 8.5 JTA事务的介绍 56 8.6 数据库的隔离级别介绍 56 8.6.1 未提交读 57 8.6.2 提交读 58 8.6.3 重复读 59 8.6.4 序列化读 60 8.7 小结 62 第九节 PreparedStatement接口的使用 62 第十节 ...

    jdbc基础和参考

    JDBC:本身自动帮我做事务管理的操作 AutoCommit = true; Connection.setAutoCommit(false); 正常: conn.commit(); 异常: conn.rollback(); JDBC批处理: addBatch executeBatch Statement ...

    【分布式事务----LCN】LCN原理及使用方式.docx

    TxManager接受到补偿事务以后先通知补偿回调地址,然后再根据是否开启自动补偿事务状态来补偿或保存该次切面事务数据。 补偿事务机制 LCN的补偿事务原理是模拟上次失败事务的请求,然后传递给TxClient模块然后再次...

    Java数据编程指南

    Java数据库连接(JDBC) 什么是JDBC JDBC结构 开始起步 使用...JDBC事务隔离级别 保存点 使用光标 PreparedStatement接口 批更新 CallableStatement JDBC Escape语法 JDBC支持类 ...

    modelAndLink 责任链模式 备忘录模式 单(双)链表 链表 显示“请稍后……"原理

    * 具体处理类:具体处理类主要是对具体的处理逻辑和处理的适用条件进行实现。 2、备忘录模式: *备忘录模式的优点有: *当发起人角色中的状态改变时,有可能这是个错误的改变,我们使用备忘录模式就可以把这个错误...

    MySQL讲解及创建数据库表

    01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库.wmv ...08A 事务.wmv

    DBJ.jar:一个开放源代码库,用于替换本机JDBC协议,DBJ.jar可以轻松地通过某种方法连接到数据库,因此用户必须在功能中提供凭据和参数,DBJ才能处理其余部分(连接,驱动程序管理器,准备的声明,结果集等)

    DBJ.jar 一个用于替换本机JDBC协议的JAR文件,可以通过调用某些方法来连接到数据库,因此用户只需在功能中提供凭据和参数,DBJ即可处理其余部分(连接,驱动程序管理器,准备好的语句) ,结果集等)要求为了构建和...

    UJOB项目-MySQL讲解及创建数据库表

    01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv...08A 事务.wmv developer_notes.doc 学习笔记 - UJOB项目.doc 源代码

    weixin024汽车保养系统+ssm(源码+部署说明+演示视频+源码介绍+lw).rar

    这个系统旨在为汽车维修店或汽车保养服务提供商提供一个管理客户信息、预约服务、跟踪维护历史和处理财务事务的平台。 技术栈介绍: Spring:一个开源的Java平台,它简化了企业级应用程序的开发。Spring提供了全面...

    UJOB项目视频-MySQL讲解及创建数据库表

    UJOB项目 项目视频第一场,已经录制完成。^_^ 目录列表: 01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv ...08A 事务.wmv developer_notes.doc 学习笔记 - UJOB项目.doc 源代码

    Hibernate实战(第2版 中文高清版)

     第8章 遗留数据库和定制SQL   8.1 整合遗留数据库   8.1.1 处理主键   8.1.2 带有公式的任意联结条件   8.1.3 联结任意的表   8.1.4 使用触发器   8.2 定制SQL   8.2.1 编写定制CRUD语句   8.2.2 ...

    面试葵花宝典

    13.EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? 14.说出数据连接池的工作机制是什么? 15同步和异步有和异同,在什么情况下分别使用他们?举例说明。 16应用服务器有那些? 17你所...

    iBATIS实战

    书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的大部分知识点,可以作为iBATIS学习和Web开发的经典案例,非常值得深入研究。 本书既可为广大的开发人员(不仅仅是Web应用程序开发人员)...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

Global site tag (gtag.js) - Google Analytics