JdbcUtils工具类3.0最终版,添加了事务相关功能和释放链接。最终版本可以直接打成jar包,在后面的基本项目都会使用该工具类

1. JdbcUtils代码

 /**
* 最终版
* @author hui.zhang
*
*/
public class JdbcUtils {
// 配置文件的默认配置,必须给出c3p0-config.xml
private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); //事务专用连接
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
/**
* 使用连接池返回一个连接对象
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
Connection con = tl.get();
//当con比等于null,说明已经开启了事务
if(con != null) return con;
return dataSource.getConnection();
} /**
* 返回连接池对象
* @return
*/
public static DataSource getDataSource() {
return dataSource;
} /**
* 开启事务
* 1. 获取一个Connection,设置它的setAutoCommit(false)
* 2. 要保证dao中使用的连接是我们刚刚创建的
* @throws SQLException
*/
public static void beginTransaction() throws SQLException{
Connection con = tl.get();
if(con != null) throw new SQLException("已经开启了事务,请不要重复开启!");
con = getConnection();
con.setAutoCommit(false);
tl.set(con);
} /**
* 提交事务
* 1. 获取beginTransaction提供的Connection,然后调用commit方法
* @throws SQLException
*/
public static void commitTransaction() throws SQLException{
Connection con = tl.get();
if(con == null) throw new SQLException("还没有开启事务,不能提交!");
con.commit();
con.close();
tl.remove();
} /**
* 回滚事务
* 1. 获取beginTransaction提供的Connection,然后调用rollback方法
* @throws SQLException
*/
public static void rollbackTransaction() throws SQLException{
Connection con = tl.get();
if(con == null) throw new SQLException("还没有开启事务,不能回滚!");
con.rollback();
con.close();
tl.remove();
} /**
* 释放连接
* @param connection
* @throws SQLException
*/
public static void releaseConnection(Connection connection) throws SQLException{
Connection con = tl.get();
//判断是不是事务专用连接,如果是不用关
if(con == null)
connection.close();
//如果con != null,说明有事务,需要判断参数连接是否与con相同
//不同 说明不是事务专用链接
if(con != connection)
connection.close();
}
}

2. 在src下给出c3p0-config.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置信息 -->
<default-config>
<!-- 连接四大参数 -->
<property name="user">root</property>
<property name="password">123</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///mydb</property> <!-- 池参数配置 -->
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</default-config>
</c3p0-config>

3. 总结

  从第一个基本版本1.0到加入连接池2.0再到现在的事务,一步一个脚印。每个版本都应该留下。。。温故而知新!!!

最新文章

  1. [Math] Backpropagation
  2. DotNetBar for Windows Forms 11.8.0.8冰河之刃重打包版
  3. github上最全的资源教程-前端涉及的所有知识体系
  4. PHP的轻量消息队列php-resque使用说明
  5. Spring计划
  6. CentOS 下安装无线哥的老爷机DELL的无线驱动
  7. 通过AssetsLibrary框架访问所有相片
  8. mysql 基础知识
  9. 基于Tengine的反向代理详细配置
  10. yield return in C#
  11. hdu 4277
  12. Android JDK配置使支持Gradle更新,Maven安装
  13. HTML基础-------HTML标签(3)
  14. ExcelUploadUtil
  15. Windows10上桌面共享
  16. CF552 E. Two Teams
  17. laravel 多个项目共享SESSION
  18. Redis之RDB与AOF
  19. HGOI20180822 五校联考卷
  20. 【LOJ】#2269. 「SDOI2017」切树游戏

热门文章

  1. 大数的加法函数--c语言
  2. Alpha阶段-个人总结
  3. 201521123069 《Java程序设计》 第8周学习总结
  4. 201521123032 《Java程序设计》第8周学习总结
  5. 201521123011 《Java程序设计》第8周学习总结
  6. 201521123045 《Java程序设计》第6周学习总结
  7. 201521123070 《JAVA程序设计》第1周学习总结
  8. 201521123020《java程序设计》第1周学习总结
  9. 201521123001《Java程序设计》第1周学习总结
  10. Servlet的生命周期与运行原理