[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); } } }
相关推荐
NULL 博文链接:https://liaoliu51.iteye.com/blog/603826
主要介绍了在Java的JDBC使用中设置事务回滚的保存点的方法,JDBC是Java用于连接各种数据库的API,需要的朋友可以参考下
1.批处理:对数据库的CRUD速度会有质...7.事务:设定事务的保存点,可以把事务隔离. crud c:create r:read u:update d:delete JTA 分布式事务 跨数据库的事务 JNDI TomCat 方便分布式处理 dbcp JDBC连接池 ............
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:本身自动帮我做事务管理的操作 AutoCommit = true; Connection.setAutoCommit(false); 正常: conn.commit(); 异常: conn.rollback(); JDBC批处理: addBatch executeBatch Statement ...
TxManager接受到补偿事务以后先通知补偿回调地址,然后再根据是否开启自动补偿事务状态来补偿或保存该次切面事务数据。 补偿事务机制 LCN的补偿事务原理是模拟上次失败事务的请求,然后传递给TxClient模块然后再次...
Java数据库连接(JDBC) 什么是JDBC JDBC结构 开始起步 使用...JDBC事务隔离级别 保存点 使用光标 PreparedStatement接口 批更新 CallableStatement JDBC Escape语法 JDBC支持类 ...
* 具体处理类:具体处理类主要是对具体的处理逻辑和处理的适用条件进行实现。 2、备忘录模式: *备忘录模式的优点有: *当发起人角色中的状态改变时,有可能这是个错误的改变,我们使用备忘录模式就可以把这个错误...
01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库.wmv ...08A 事务.wmv
DBJ.jar 一个用于替换本机JDBC协议的JAR文件,可以通过调用某些方法来连接到数据库,因此用户只需在功能中提供凭据和参数,DBJ即可处理其余部分(连接,驱动程序管理器,准备好的语句) ,结果集等)要求为了构建和...
01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv...08A 事务.wmv developer_notes.doc 学习笔记 - UJOB项目.doc 源代码
这个系统旨在为汽车维修店或汽车保养服务提供商提供一个管理客户信息、预约服务、跟踪维护历史和处理财务事务的平台。 技术栈介绍: Spring:一个开源的Java平台,它简化了企业级应用程序的开发。Spring提供了全面...
UJOB项目 项目视频第一场,已经录制完成。^_^ 目录列表: 01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv ...08A 事务.wmv developer_notes.doc 学习笔记 - UJOB项目.doc 源代码
第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你所...
书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的大部分知识点,可以作为iBATIS学习和Web开发的经典案例,非常值得深入研究。 本书既可为广大的开发人员(不仅仅是Web应用程序开发人员)...
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事务 ...