java-结合c3p0封装的db 事务 类
2017-08-09 13:33
155 查看
将Connection对象,绑定到当前线程中去,这样在每一个方法中都能使用这个链接。
DataSourceUtils.java
DataSourceUtils.java
package com.itheima.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DataSourceUtils { private static ComboPooledDataSource ds=new ComboPooledDataSource(); private static ThreadLocal<Connection> tl=new ThreadLocal<>(); /** * 获取数据源 * @return 连接池 */ public static DataSource getDataSource(){ return ds; } /** * 从当前线程上获取连接 * @return 连接 * @throws SQLException */ public static Connection getConnection() throws SQLException{ Connection conn = tl.get(); if(conn==null){ //第一次获取 创建一个连接 和当前的线程绑定 conn=ds.getConnection(); //绑定 tl.set(conn); } return conn; } /** * 释放资源 * * @param conn * 连接 * @param st * 语句执行者 * @param rs * 结果集 */ public static void closeResource(Connection conn, Statement st, ResultSet rs) { closeResource(st, rs); closeConn(conn); } public static void closeResource(Statement st, ResultSet rs) { closeResultSet(rs); closeStatement(st); } /** * 释放连接 * * @param conn * 连接 */ public static void closeConn(Connection conn) { if (conn != null) { try { conn.close(); //和当前的线程解绑 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } /** * 释放语句执行者 * * @param st * 语句执行者 */ public static void closeStatement(Statement st) { if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } st = null; } } /** * 释放结果集 * * @param rs * 结果集 */ public static void closeResultSet(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } } /** * 开启事务 * @throws SQLException */ public static void startTransaction() throws SQLException{ //获取连接//开启事务 getConnection().setAutoCommit(false); } /** * 事务提交 */ public static void commitAndClose(){ try { //获取连接 Connection conn = getConnection(); //提交事务 conn.commit(); //释放资源 conn.close(); //解除绑定 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } } /** * 事务回滚 */ public static void rollbackAndClose(){ try { //获取连接 Connection conn = getConnection(); //事务回滚 conn.rollback(); //释放资源 conn.close(); //解除绑定 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } } }
相关文章推荐
- [java][db]JAVA分布式事务原理及应用
- 如何结合Sping与Java封装自己的Exception?
- [java][db]JAVA分布式事务原理及应用
- 【JavaWeb-10】事务、事务特征、隔离级别、连接池、DBCP、C3P0、利用tomcat管理数据源
- java中简单的db封装
- 【Java技术点滴】——代理模式及其对事务封装
- java--javaWeb--终极版JDBCUtils,使用事务、commons-dbutils、c3p0
- JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以c3p0)
- Java入门 二、封装
- JAVA面向对象————封装
- Java数组与函数的结合
- java三大特性:(一)封装
- iOS block 实战(AFNetworking 结合block调用封装)
- Java反射解析XML字符串并封装到指定的JavaBean(比较复杂)
- java用poi解析excel2003和2007并封装成对象返回
- Java框架SSH结合Easyui控件实现省市县三级联动示例解析
- Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍
- Java中JDBC的事务问题
- 黑马程序员 Java面向对象——封装
- JavaWeb:JDBC之事务