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再到现在的事务,一步一个脚印。每个版本都应该留下。。。温故而知新!!!

JavaWeb基础之JdbcUtils工具类final的更多相关文章

  1. JavaWeb基础之JdbcUtils工具类1.0

    2016年12月20日,第一次学习JDBC.看的是传智播客崔希凡老师的视频,东北口音很是风趣幽默,技术之牛让人膜拜.2017年9月21日,再次重温web知识,分享JdbcUtils工具类,用以接下来的 ...

  2. JavaWeb基础之JdbcUtils工具类2.0

    使用c3p0连接池来改版JdbcUtils工具 1. 使用c3p0连接池获取连接,使代码更加简单 /** * 使用c3p0连接池做小工具 * JdbcUtils v2.0 * @author hui. ...

  3. 记一次关于JDBCUtils工具类的编写

    jdbc.properties数据库配置的属性文件内容如下 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost/xxxx ...

  4. 【JDBC】学习路径5-提取JDBCUtils工具类

    回顾我们上面几节的内容,我们发现重复代码非常多,比如注册驱动.连接.关闭close()等代码,非常繁杂. 于是我们将这些重复的大段代码进行包装.提取成JDBCUtils工具类. 第一章:提取注册连接模 ...

  5. Druid 连接池 JDBCUtils 工具类的使用

    Druid工具介绍 它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. 支持所有JDBC兼容的数据库,包括Oracle.MySQL. ...

  6. 创建JDBCUtils工具类

    JDBCUtils工具类 私有化构造函数,外界无法直接创建对象 提供公共的,静态的,getConnection 方法,用来给外界提供数据库连接 提供公共的,静态的,close方法,用来释放资源 pac ...

  7. JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)

    一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...

  8. 【BigData】Java基础_定义工具类,对ArrayList排序并且求最大值、最小值、平均值

    需求描述 编写一个工具类,对ArrayList实现以下功能: ① 排序 ② 求最大值 ③ 求最小值 ④ 求平均值 需求实现 实现代码 package cn.test.logan.day04; impo ...

  9. JDBCUtils工具类

    JdbcUtils.java import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource ...

随机推荐

  1. 从Object和Function说说JS的原型链

    ECMAScript规定了两个特殊的内置对象:Object和Function.他们的特殊性在于,他们本身既是对象又是函数,而他们同时也是对象和函数的构造器.这种自己生自己的逻辑显然违反人性,如果还停留 ...

  2. NHibernate教程(7)--并发控制

    本节内容 什么是并发控制? 悲观并发控制(Pessimistic Concurrency) 乐观并发控制(Optimistic Concurrency) NHibernate支持乐观并发控制 实例分析 ...

  3. nhibernate教程(4)--条件查询(Criteria Query)

    NHibernate之旅(4):探索查询之条件查询(Criteria Query) 2008-10-16 18:20 by 李永京, 44341 阅读, 43 评论, 收藏,  编辑 本节内容 NHi ...

  4. IT经典书籍——Head First系列…

    Head First 系列书籍是由 O'Relly 出版社发行的一系列教育书籍,中文一般翻译为"深入浅出",它强调以特殊的方式排版,由大量的图片和有趣的内容组合构成,而达到非疲劳的 ...

  5. ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2

    java编程时偶尔出现运行结果下面这样的错误: ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code ...

  6. 201521123098 《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1. 泛型的本质: 1. 他只是一个编译器现象: 2. 虚拟机里只有普通的类和方法: 3. 运行时没有类型参数 ...

  7. 201521123048 《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 for (in ...

  8. 201521123026 《java程序设计》第七周学习总结

    1. 本章学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: public ...

  9. 用Beautifulsoup 来爬取贴吧图片

    import urllib.request import bs4 import re import os url="https://tieba.baidu.com/p/1988291937? ...

  10. 纳税服务系统【统计图Fusionchart】

    需求 我们在投诉模块中还有一个功能没有实现: 统计:根据年度将相应年度的每个月的投诉数进行统计,并以图表的形式展示在页面中:在页面中可以选择查看当前年度及其前4年的投诉数.在页面中可以选择不同的年度, ...