您的位置:首页 > 数据库

数据库链接池

2017-09-17 21:09 197 查看
package com.yinhe.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 DataSource dataSource = new ComboPooledDataSource();

    private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();

    // 直接可以获取一个连接池

    public static DataSource getDataSource() {

        return dataSource;

    }

    // 获取连接对象

    public static Connection getConnection() throws SQLException {

        Connection con = tl.get();

        if (con == null) {

            con = dataSource.getConnection();

            tl.set(con);

        }

        return con;

    }

    // 开启事务

    public static void startTransaction() throws SQLException {

        Connection con = getConnection();

        if (con != null) {

            con.setAutoCommit(false);

        }

    }

    // 事务回滚

    public static void rollback() throws SQLException {

        Connection con = getConnection();

        if (con != null) {

            con.rollback();

        }

    }

    // 提交并且 关闭资源及从ThreadLocall中释放

    public static void commitAndRelease() throws SQLException {

        Connection con = getConnection();

        if (con != null) {

            con.commit(); // 事务提交

            con.close();// 关闭资源

            tl.remove();// 从线程绑定中移除

        }

    }

    // 关闭资源方法

    public static void closeConnection() throws SQLException {

        Connection con = getConnection();

        if (con != null) {

            con.close();

        }

    }

    public static void closeStatement(Statement st) throws SQLException {

        if (st != null) {

            st.close();

        }

    }

    public static void closeResultSet(ResultSet rs) throws SQLException {

        if (rs != null) {

            rs.close();

        }

    }

}

数据库连接池技术带来的优势:

        1、资源复用

    由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。

  2、更快的系统响应速度

    数据库连接池在初始化过程中,往往已经创建了若干数据库连接至于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间,从而缩减了系统整体响应时间。

  3、统一的连接管理,避免数据库连接泄漏

    在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄漏。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 连接池