Oracle数据库端测试环境见:http://www.cnblogs.com/yshyee/p/4392328.html

package com.mw.utils;import java.sql.Connection;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;/*** @author  y* @date    2015-4-4 13:33:02* @version V1.0* @desc    Connection 事务管理* 使用方式:* (1)首先从TransactionManager获取Connection* (2)开启事务* ()进行业务处理* (3)提交事务* (4)异常回滚事务* (5)关闭链接*/
public final class TransactionManager {/*** 定义局部线程变量,用于保存Connection*/private static final ThreadLocal<Connection> connThreadLocal = new ThreadLocal<Connection>();private TransactionManager(){}/*** 采用内部类实现单例*/private static class TransactionManagerHolder{private static final TransactionManager instance = new TransactionManager();}public static TransactionManager getInstance(){return TransactionManagerHolder.instance;}/*** 1:从当前线程局部变量中获取数据库连接资源* @return */public Connection get(){Connection conn = connThreadLocal.get();if(null==conn){conn = JdbcUtil.getConnection();connThreadLocal.set(conn);}return conn;}/*** 2:开启事务* @param conn */public void beginTransaction(Connection conn){try {if(null!=conn){if(conn.getAutoCommit()){conn.setAutoCommit(false);}}}catch (SQLException ex) {Logger.getLogger(TransactionManager.class.getName()).log(Level.SEVERE, null, ex);}}/*** 3:提交事务* @param conn */public void commitTransaction(Connection conn){try {if(null!=conn){if(!conn.getAutoCommit()){conn.commit();}}}catch (SQLException ex) {Logger.getLogger(TransactionManager.class.getName()).log(Level.SEVERE, null, ex);}}/*** 4:回滚事务* @param conn*/public void rollbackTransaction(Connection conn){try {if(null!=conn){if(!conn.getAutoCommit()){conn.rollback();}}}catch (SQLException ex) {Logger.getLogger(TransactionManager.class.getName()).log(Level.SEVERE, null, ex);}}/*** 5:关闭链接,将数据库连接从当前线程局部变量中移除* @param conn*/public void close(Connection  conn){JdbcUtil.release(conn);connThreadLocal.remove();}}

测试:

package com.mw.test;import com.mw.utils.TransactionManager;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;/*** @author  y* @date    2015-4-4 12:34:05* @version 1.0* @desc    */
public class Test {public static void main(String[] args) {QueryRunner qr = new QueryRunner();Connection conn = TransactionManager.getInstance().get();TransactionManager.getInstance().beginTransaction(conn);int age = 10;try {CallableStatement cs = conn.prepareCall("{call pack_user.p_user_select(?,?)}");cs.setInt(1, age);cs.registerOutParameter(2, Types.VARCHAR);cs.execute();String succ = cs.getString(2);if("T".equalsIgnoreCase(succ)){String sql = "select * from tmp_yshy";List<Map<String, Object>> list = qr.query(conn, sql, new MapListHandler());for(Map map:list){System.out.println("c1:"+map.get("c1")+",c2:"+map.get("c2"));}}else{System.out.println("succ:"+succ);}TransactionManager.getInstance().commitTransaction(conn);} catch (SQLException ex) {TransactionManager.getInstance().rollbackTransaction(conn);Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);} finally{TransactionManager.getInstance().close(conn);}}}

转载于:https://www.cnblogs.com/yshyee/p/4392377.html

封装JDBC事务操作,执行存储过程测试相关推荐

  1. JDBC之CallableStatement执行存储过程

    ​ 在前面的一篇文章中,我们学习使用Statement.PreparedStatement来完成对数据表的增删改查.而存储过程作为数据库的重要组成部分(痛点,当时学的时候头发都掉了好几根

  2. JDBC工具类,基于C3P0的数据库连接池,提供获取连接池、获取连接对象、释放资源和封装事务操作的方法...

    /**  *  * JDBC工具类,基于C3P0数据库连接池的实现  *  * @author 周瑜  * @2018年5月7日 下午2:13:20  */ public final class JD ...

  3. JDBC操作步骤和JDBC事务

    1.加载驱动 这是1.8版本包里面的,如果是1.5的话可以把cj除去 //加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 2.获得连 ...

  4. 使用JDBC进行数据库的事务操作(2)

    本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...

  5. 第十三天 - 封装JDBC操作Hive工具类 - HWI配置与使用 - JavaWeb结合Hive

    第十三天 - 封装JDBC操作Hive工具类 - HWI配置与使用 - JavaWeb结合Hive 第十三天 - 封装JDBC操作Hive工具类 - HWI配置与使用 - JavaWeb结合Hive ...

  6. php pdo设置事物级别,PHP中使用PDO操作事务的一些小测试

    PHP中使用PDO操作事务的一些小测试 关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内 ...

  7. android 封装scpi 命令,一种scpi命令定义、解析、执行和测试的方法

    一种scpi命令定义.解析.执行和测试的方法 [技术领域] [0001]本发明涉及程序控制领域,特别涉及一种SCPI命令定义.解析.执行和测试的方法. [背景技术] [0002]SCPI (Stand ...

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

    那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...

  9. JDBC学习笔记03【JDBC事务管理、数据库连接池、JDBCTemplate】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

最新文章

  1. 数据统计之日分类商品访问量
  2. layui监听当前页_事件监听 · layui使用手册 · 看云
  3. 服务器windows模拟linux环境,科学网—Windows不用虚拟机或双系统,轻松实现shell环境:gitforwindows - 刘永鑫的博文...
  4. 关于键盘事件中keyCode、which和charCode 的兼容性测试
  5. python适合机器视觉_Python机器视觉编程常用数据结构与示例
  6. 开启MySQL的binlog日志
  7. ​OCO订单(委托)
  8. 2019ASC世界大学生超算竞赛预赛结果出炉:20校晋级,北航第一
  9. 加速爬虫:异步加载asyncio
  10. CF984C Finite or not?
  11. 基于android的家庭财务通 .apk,毕业设计(论文)-基于Android的家庭财务管家的设计与实现.doc...
  12. 离线浏览工具webdup 可下载网站页面
  13. 51开发板用ADC采集模拟量
  14. 用python画小仓鼠教程_看看萌萌哒的仓鼠是怎么画出来的,最详细的图文教程,别错过!...
  15. win7系统ftp服务器密码修改,win7 ftp服务器密码
  16. KEIL5 AC6 出现printf告警
  17. abaqus钢结构螺栓连接分析
  18. 继 Facebook 开源 PyTorch3D 后,谷歌开源 TensorFlow 3D 场景理解库
  19. VERO VISI安装教程
  20. 惊魂一小时:全国域名解析首遭大规模污染

热门文章

  1. 【C++】 为什么C++空类占一个字节
  2. [Qt教程] 第23篇 数据库(三)利用QSqlQuery类执行SQL语句
  3. 1个ieee1394端口_ieee1394接口是什么及作用
  4. Window下VS运行达梦DPI
  5. DocKer linux Centos 安装DocKer 只需要十步
  6. 树莓派 QT 编程下的硬件中断
  7. 每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求
  8. K个一组翻转链表—leetcode25
  9. 二叉树的最近公共祖先—leetcode236
  10. 解决 iOS 11 webview 顶部空白条的问题