[转]c3p0学习-JdbcUtil工具类

原文:https://www.cnblogs.com/jonny-xu/p/6374163.html

一、需要jar包:

  c3p0-0.9.1.2.jar

  mysql-connector-java-5.1.20-bin.jar

二、Java代码:

  

package com.javaweb.jdbc;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtil {

    // 饿汉式
    private static DataSource ds = new ComboPooledDataSource();
    /*ThreadLocal
     * 它为null表示没有事务
     * 它不为null表示有事务
     * 当事物开始时,需要给它赋值
     * 当事务结束时,需要给它赋值null
     * 并且在开启事务时,让dao的多个方法共享这个Connection
     */
    private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();

    public static DataSource getDataSource(){
        return ds;
    }

    /**
     * 需要手动开始事务时
     * dao使用本方法来获取连接
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException{
        Connection con = tl.get();
        if(con != null){
            return con;
        }
        return ds.getConnection();
    }

    /**
     * 开启事务
     * @throws SQLException
     */
    public static void beginTransaction() throws SQLException {
        Connection con = tl.get();//获取当前线程的事务连接
        if(con != null) throw new SQLException("已经开启了事务,不能重复开启!");
        con = ds.getConnection();//给con赋值,表示开启了事务
        con.setAutoCommit(false);//设置为手动提交
        tl.set(con);//把当前事务连接放到tl中
    }

    /**
     * 提交事务
     * @throws SQLException
     */
    public static void commitTransaction() throws SQLException {
        Connection con = tl.get();//获取当前线程的事务连接
        if(con == null) {
            throw new SQLException("没有事务不能提交!");
        }
        con.commit();//提交事务
        con.close();//关闭连接
        con = null;//表示事务结束!
        tl.remove();
    }

    /**
     * 回滚事务
     * @throws SQLException
     */
    public static void rollbackTransaction() throws SQLException {
        Connection con = tl.get();//获取当前线程的事务连接
        if(con == null) {
            throw new SQLException("没有事务不能回滚!");
        }
        con.rollback();
        con.close();
        con = null;
        tl.remove();
    }

    /**
     * 释放Connection
     * @param con
     * @throws SQLException
     */
    public static void releaseConnection(Connection connection) throws SQLException {
        Connection con = tl.get();//获取当前线程的事务连接
        if(connection != con) {//如果参数连接,与当前事务连接不同,说明这个连接不是当前事务,可以关闭!
            if(connection != null &&!connection.isClosed()) {//如果参数连接没有关闭,关闭之!
                connection.close();
            }
        }
    }
}

三、在src下创建名字必须为 c3p0-config.xml文件

 

<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
    <default-config>
        <!-- 四大必要属性 -->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/db_mysqltest</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">123</property>

         <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        <property name="acquireIncrement">3</property>
        <!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3-->
        <property name="initialPoolSize">10</property>
         <!-- 连接池中保留的最小连接数,默认为:3-->
        <property name="minPoolSize">2</property>
         <!--连接池中保留的最大连接数。默认值: 15 -->
        <property name="maxPoolSize">10</property>
    </default-config>
</c3p0-config>

原文地址:https://www.cnblogs.com/sungong1987/p/11568102.html

时间: 2024-10-25 20:22:13

[转]c3p0学习-JdbcUtil工具类的相关文章

02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写

 c3p0也是一个开源jdbc连接池,我们熟悉的Hibernate和Spring框架使用的都是该数据源. 这里获得数据源使用的方法是:ComboPooledDataSource 它提供的构造方法有: ComboPooledDataSource() ComboPooledDataSource(boolean autoregister) ComboPooledDataSource(java.lang.String configName) 通过第三个构造方法读取配置文件,它的配置文件是一个xml文

C3P0连接池工具类实现步骤及方法

C3P0连接池的工具类 使用C3P0获得连接对象连接池有一个规范接口 javax.sal.DataSourse 接口定义了一个从连接池中获得连接的方法getConnection(); 步骤导入jar包在成员变量位置创建一个静态的ComboPooledDtatSource 对象在静态代码块中使用ComboPooledDtatSource 对象 setxxxx方法 设置数据库连接定义一个静态方法 ComboPooledDtatSource 对象中获得数据库连接 Coonection释放资源(归还):

学习StringUtils工具类—核心API

在JAVA中我们用的最多的类应该就是String了.对于String的处理说简单也简单,但是有的时候要自己去实现一些功能还是要浪费一点时间的.一年之前接触了StringUtils这个工具类,就猛然爱上了它,日复一日心里始终觉得这东西实在太好了.不敢独享,所以决定要总结一下个人使用StringUtils的一些心得. 1.StringUtils.isEmpty(String str)  经常需要去判断一个字符串是否为空,null,"".使用该方法可以轻松得到结论: StringUtils.

Lucene学习:工具类

1.1. Lucene工具类 为了后面的开发.测试方便,这里编写一个工具类: 1 import java.io.IOException; 2 3 import java.nio.file.Paths; 4 5 import java.util.List; 6 7 8 9 import org.apache.lucene.analysis.Analyzer; 10 11 import org.apache.lucene.document.Document; 12 13 import org.apa

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

Apache commons lang工具类学习笔记(2)--StringUtils

StringUtils工具类具有对String具有简单而强大的处理能力,从检查空串到分割字符串,到生成格式化的字符串,使用都很方便简洁,能减少很多代码量; 详细的使用方法可以参考下面的例子或者官方的API(http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isAlpha(java.lang.CharSequence)) packa

观察者模式学习--使用jdk的工具类简单实现

观察者模式学习之二:使用jdk的自带的工具类实现,与自己实现相比,两者有以下的区别: 1,自己实现,需要定义观察者的接口类和目标对象的接口类.使用java util的工具类,则不需要自己定义观察者和目标对象的接口类了,jdk已经定义好了. 2,自己实现,具体的目标对象类中,实现了接口方法后,还必须要自己实现维护观察者的注册删除信息.但是使用jdk,则不需要了,在 jdk的util下的observable类里面已经帮忙维护好了. 3,目标对象触发观察者的update的通知方式有了变化,自己的实现,

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(boolea

一步一步跟我学习lucene(8)---lucene搜索之索引的查询原理和查询工具类示例

昨天我们了解了lucene搜索之IndexSearcher构建过程(http://blog.csdn.net/wuyinggui10000/article/details/45698667),对lucene的IndexSearcher有一个大体的了解,知道了怎么创建IndexSearcher,就要开始学会使用IndexSearcher进行索引的搜索,本节我们学习索引的查询原理和根据其相关原理写索引查询的工具类的编写: IndexSearcher提供了几个常用的方法: IndexSearcher.