数据库连接池

数据库连接池

概述:

是一个容器,用来存放数据库连接;

当系统初始化号以后,容器被创建,容器会申请一些连接对象,当用户访问数据库时,从容器中获取连接对象,访问完毕以后,将连接对象归还给容器。

好处:节约资源和提高效率。

实现

1.标准接口:DataSource javax.sql包下;

1.方法:

获取连接:getConnection();

归还连接:如果连接对象是从数据库连接池中获得的,那么调用Connection.close()方法,不 会关闭连接,而是归还给容器。

2.一般我们不去实现它,由数据库厂家去实现

1.C3P0:数据库连接池技术

2.Druid:数据库连接池实现技术,有阿里巴巴提供

C3P0

使用步骤

1.导入jar包 c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.12.jar 以及数据库驱动jar包;

2.定义配置文件:

名称:c3p0.properties 或者 c3p0-config.xml文件;

路径:放置项目下的src路径下即可。

3.创建核心对象 数据库连接池对象ComboPooledDataSource;

4.获取连接:getConnection()

Druid

使用步骤

1.导入jar包druid-1.0.9.jar;

2.定义配置文件:1.是properties形式的;2.可以为任意名称和任意路径;

3.加载配置文件 Properties;

4.获取数据库连接池对象:DruidDataSourceFactory;

5.获取连接对象 getConnection()。

定义Druid工具类

public class DruidUtils {
    private static DataSource ds = null;

    static {
        //加载配置文件
        Properties pro = new Properties();
        try {
            pro.load(DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //获取连接池对象
            ds= DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    public static void close(Connection conn , Statement stmt , ResultSet res){
        close(conn);
        close(stmt);
        close(res);
    }
    public static void close(Connection conn , Statement stmt ){
       close(conn);
       close(stmt);
    }
    public static void close(Connection conn ){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(Statement stmt ){
        if (stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close( ResultSet res){
        if(res!=null){
            try {
                res.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    //获取连接池对象
    public static DataSource getDataSourse(){
        return ds;
    }
}
原文地址:https://www.cnblogs.com/susexuexi011/p/14353755.html