JDBC事务处理和保存点

1/** 2 * savepoint保存点使用 3 * savepoint = con.setSavepoint(); 4 */ 5 /** 6 * 7 * 事务处理 con.setAutoCommit(false); 8 * con.commit(); 9 * con.rollback(savepoint);回滚到保存点 10 * con.commit(); 11 *distributed transaction JTA 12 *一个分布式事务(distributed transaction) 13 *包括一个事务管理器(transaction manager)和一个或多个资源管理器(resource manager)。 14 */ 15 16 package com.study.test; 17 18import java.sql.Connection; 19import java.sql.PreparedStatement; 20import java.sql.SQLException; 21import java.sql.Savepoint; 22import java.sql.Statement; 23import java.sql.Timestamp; 24import java.text.SimpleDateFormat; 25import java.util.Calendar; 26import org.junit.Test; 27 28import com.study.dao.AddressService; 29import com.study.dao.DaoFactory; 30import com.study.dao.domain.Address; 31import com.study.exceptions.DataAccessException; 32import com.study.utils.JdbcUtils; 33 34/** 35 * 36 * 事务处理 con.setAutoCommit(false); 37 * con.commit(); 38 * con.rollback(savepoint);回滚到保存点 39 * con.commit(); 40 *distributed transaction JTA 41 *一个分布式事务(distributed transaction) 42 *包括一个事务管理器(transaction manager)和一个或多个资源管理器(resource manager)。 43 */ 44public class TestTransaction { 45 46 @Test 47 public void post() { 48 49 Connection con = null; 50 Statement st = null; 51 try { 52 con = JdbcUtils.getConnection(); 53 con.setAutoCommit(false); 54 st = con.createStatement(); 55 st.addBatch("update address set money=money-100 where addressid=10"); 56 st.addBatch("update address set money=money+100 where addressid=11"); 57 st.executeBatch(); 58 con.commit(); 59 60 } catch (SQLException e) { 61 try { 62 if (con != null) 63 con.rollback(); 64 } catch (SQLException s) { 65 throw new DataAccessException(s.getMessage()); 66 } 67 68 } finally { 69 JdbcUtils.free(null, st, con); 70 } 71 72 } 73 74 /** 75 * savepoint保存点使用 76 * savepoint = con.setSavepoint(); 77 */ 78 @SuppressWarnings("unused") 79 @Test 80 public void savePoint() { 81 82 Connection con = null; 83 Statement st = null; 84 Savepoint savepoint = null; 85 try { 86 con = JdbcUtils.getConnection(); 87 con.setAutoCommit(false); 88 st = con.createStatement(); 89 st.executeUpdate("update address set money=money+100 where addressid=10"); 90 savepoint = con.setSavepoint(); 91 st.executeUpdate("update address set money=money+50 where addressid=11"); 92 st.executeUpdate("update address set money=money+50 where addressid=12"); 93 con.commit(); 94 95 } catch (SQLException e) { 96 97 try { 98 if (con != null&&savepoint!=null){ 99 con.rollback(savepoint);//回滚到保存点 100 con.commit(); 101 } 102 } catch (SQLException s) { 103 throw new DataAccessException(e.getMessage()); 104 } 105 106 107 } finally { 108 JdbcUtils.free(null, st, con); 109 } 110 111 } 112 113}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )