数据库连接池

##数据库连接池


1.概念:

  一个容器(集合),存放数据库连接的容器。
  当系统初始化好,容器被创建,容器中会申请一些连接对象,当用户访问数据时,从容器中获取连接对象,用户访问完后会将连接对象归还给容器。

 

 

2.好处:
  1.节约资源
  2.用户高效访问

 

3.实现:
  1.标准接口:DataSource   javax.sql包下
    方法:
    *获取连接:getConnection()
    *归还连接:如果链接对象Connection是从连接池中获取的,那么调用Connection.clos()方法,则不会关闭,而是归还。

  2.一般我们不去实现他,由数据库厂商实现
    1.C3P0:数据库连接池技术
    2.Druid:数据库连接池实现技术,由阿里巴巴提供

 

4.C3O0:数据库连接池技术
  *步骤:
    1.导入jar包(两个):

      c3p0-0.9.5.2.jar    mchange-commons-java-0.2.12.jar
    2.定义配置文件:

      *名称:c3p0.properties 或者c3p0-config.xml

      *路径:直接讲文件放在src目录下即可
      *修改配置文件中的内容。
      3.创建核心对象 数据库连接池对象:ComboPooledDataSource

DataSource ds = new ComboPooledDataSource();

      4.获取连接:getConnection()

Connection conn = ds.getConnection();

 

 

 

 

5.Druid:数据库连接池实现技术,由阿里巴巴提供
  *步骤:
    1.导入jar包druid-1.0.9.jar
    2.定义配置为文件:
      *是properties形式的
      *可以叫任意名称,可以放在任意目录下
    3.加载配置文件

Properties pro =new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);

    4.获取数据库连接池对象:通过工厂类获取DruidDataSourceFactory

DataSource ds = DruidDataSourceFactory.createDataSource(pro);

    5.获取连接:getConnection();

Connection conn = ds.getConnection();

 

 

6.创建数据库连接池工具类
  提供方法:
  1.获取连接方法
  2.获取资源
  3.获取连接池的方法
  /*代码*/

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DruidUtil {
    static DataSource ds;
    static {
        //1.导入配置文件
                Properties pro =new Properties();
                InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
                try {
                    pro.load(is);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                //2.创建数据库连接池对象
                try {
                    ds = DruidDataSourceFactory.createDataSource(pro);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    }
    
    public static Connection getconnection() {
        try {
            return ds.getConnection();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }
    
    public static DataSource getDataSource() {
        return ds;
    }
    
    /**
     * 释放资源
     *
     */
    public static void close(Statement stmt,Connection con) {
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        if(con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    
    /**
     *重载 
     * 
     */
    public static void close(ResultSet res,Statement stmt,Connection con) {
        if(res != null) {
            try {
                res.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        if(con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    //重载
    public static void close(ResultSet res,PreparedStatement pstmt,Connection con) {
        if(res != null) {
            try {
                res.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        if(con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    
    
}

 

你可能感兴趣的:(数据库连接池)