JdbcUtils.java

import java.sql.Connection;
import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 依赖:
* + c3p0-config.xml
* + c3p0-0.9.2-pre1.jar
* + mchange-commons-0.2.jar
* 版本1.3
* 更新日期:2018/07/03
* @author CeoBai
*
*/
public class JdbcUtils {
//ComboPooledDataSource(String configName)的参数configName指的是配置文件c3p0-config.xml中的 <named-config name="mysql">...</named-config>
//如果没有输入configName参数,那么就采用默认的<default-config>...</defalut-config>,那么就可以为空不传参数
private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");
private static Connection con = null;
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
/**
* 获取连接对象
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
con = tl.get();
if(con != null){return con;}
return dataSource.getConnection();
}
/**
* 获取连接池对象
* @return
*/
public static DataSource getDataSource(){
return dataSource;
}
/**
* 开启事务
* @throws SQLException
*/
public static void beginTransaction() throws SQLException{
con = tl.get();
if(con != null){throw new RuntimeException("事务已经开启!不能重复开启!");}
con = getConnection();
con.setAutoCommit(false);
tl.set(con);
}
/**
* 提交事务
* @throws SQLException
*/
public static void commitTransaction() throws SQLException{
con = tl.get();
if(con == null){throw new RuntimeException("事务还没开启!不能提交!");}
con.commit();
con.close();//归还连接对象到连接池
tl.remove();//移除连接对象con。那么tl.get() == null
}
/**
* 回滚事务
* @throws SQLException
*/
public static void rollbackTransaction() throws SQLException{
con = tl.get();
if(con == null){throw new RuntimeException("事务还没开启!不能回滚!");}
con.rollback();
con.close();
tl.remove();
}
/**
* 关闭 非事务专用的连接
* @param connection
* @throws SQLException
*/
public static void releaseConnection(Connection connection) throws SQLException{
con = tl.get();//获取事务专用连接
if(con == null){connection.close();}
if(con != connection){connection.close();}
}
}

c30p-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<!-- c3p0有两种配置方式,一种是默认的default-config,一种是按名字区分:named-config需要添加一个属性值name -->
<default-config>
<property name="jdbcUrl">jdbc:oracle:thin:username/password@amrood:1521:EMP</property>
<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
<property name="user">root</property>
<property name="password"></property> <property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</default-config>
<named-config name="mysql">
<property name="jdbcUrl">jdbc:mysql://localhost:3306/db_user</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password"></property> <property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</named-config>
</c3p0-config>

最新文章

  1. python基础篇----字符串unicode
  2. PHP中使用mysql处理结果集
  3. 【HDOJ】1244 Max Sum Plus Plus Plus
  4. 《Algorithms 4th Edition》读书笔记——3.1 符号表(Elementary Symbol Tables)-Ⅰ
  5. 系统里有Courier New字体 Eclipse没有这个字体选项
  6. Python迭代器,生成器--精华中的精华
  7. 前端使用moment.js 获取当前时间往前的时间
  8. Leetcode 21. Merge Two Sorted Lists(easy)
  9. mac系统vscode环境配置,以及iTerm2配置Zsh + on-my-zsh shell
  10. Specify 的含义 ------ 转载
  11. php 与 memcache 笔记
  12. WPF中应用字体图标
  13. 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)
  14. item 5: 比起显式的类型声明,更偏爱auto
  15. tomcat修改上下文path
  16. linphone
  17. Yarn 和 Npm 命令行切换 摘录
  18. 使用Visual Studio进行 Android开发的十大理由
  19. ubuntu14.04搭建ftp服务器
  20. My First JS Page

热门文章

  1. 从零开始写C# MVC框架之--- 项目结构
  2. 【转载】BaseDao设计
  3. python在Android下的自动化测试用法
  4. [转载]AMOLED结构详解,BOE专家给你分析驱动补偿
  5. Flask入门flask-script 蓝本 钩子函数(三)
  6. 创建Spark镜像文件
  7. ORACLE_LPAD_FUNCTION
  8. Struts2学习-拦截器2续
  9. 安装PYTHON PIL包
  10. June 02nd 2017 Week 22nd Friday