DBCP连接池的创建

实现连接池

使用两个Jar文件来实现: 
文件是apache提供的 : dbcp.jar(连接池) pool.jar(连接池实现的依赖库)

1. 这个线程池会预读本地文件 , 进行数据库的连接配置:

需要在src根目录, 创建一个properties文件: 

	<span class="hljs-meta">#驱动地址</span>
	driverClassName=oracle.jdbc.OracleDriver
	<span class="hljs-meta">#连接地址</span>
	url=jdbc:oracle:thin:@localhost:<span class="hljs-number">1521</span>
	<span class="hljs-meta">#帐号</span>
	username=system
	<span class="hljs-meta">#密码</span>
	password=<span class="hljs-number">123456</span>

	<span class="hljs-meta">#初始化的连接数量</span>
	initialSize=<span class="hljs-number">10</span>
	<span class="hljs-meta">#最大的连接数量</span>
	maxActive=<span class="hljs-number">200</span>
	<span class="hljs-meta">#最大空闲连接数量</span>
	maxIdle=<span class="hljs-number">10</span>
	<span class="hljs-meta">#最小的空闲连接诶数量</span>
	minIdle=<span class="hljs-number">1</span>
	<span class="hljs-meta">#超时时间(毫秒)</span>
	maxWait=<span class="hljs-number">15000</span>

2. 在 Java 代码中, 将上面的配置文件, 变为 Properties 对象

InputStream <span class="hljs-keyword">is</span> = DBCPUtil.<span class="hljs-keyword">class</span>.getClassLoader().getResourceAsStream(<span class="hljs-string">"dbcp.properties"</span>);
	Properties ppt = <span class="hljs-keyword">new</span> Properties();
	<span class="hljs-comment">//加载一个流指向的文件</span>
	ppt.load(<span class="hljs-keyword">is</span>);

3. 通过连接池工厂对象 获取一个连接池
DataSource ds = BasicDataSourceFactory.createDataSource(ppt);

4. 获取连接对象

Connection conn = ds.getConnection();

5. 使用完毕连接 , 正常关闭连接即可, 连接池会自动回收!

创建数据库连接池

编写 properies 配置文件

配置文件具体内容如下:
	#驱动地址
	driverClassName=oracle.jdbc.OracleDriver
	#连接池
	url=jdbc:oracle:thin:@localhost:1521:XE
	#账号
	username=scott
	#密码
	password=tiger
	#最大连接数量
	maxAcive=100
	#初始连接数量
	initialSize=5
	#最大空闲连接数量
	maxIdle=5
	#最小空闲连接数量
	minIdle=3
	#超时等待时间
	maxWait=1000

编写数据连接池工具类

具体实现代码如下:
	import javax.sql.DataSource;
	import java.io.InputStream;
	import java.sql.Connection;
	import java.sql.ResultSet;
	import java.sql.Statement;
	import java.util.Properties;
<span class="hljs-comment">/**
 * <span class="hljs-doctag">@Auther</span>: 
 * <span class="hljs-doctag">@Date</span>: 2018/12/24 16:03
 * <span class="hljs-doctag">@Description</span>: 创建一个连接池工具类
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">DBCPUtil</span> {

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> DataSource dataSource;

    <span class="hljs-keyword">static</span>{
        <span class="hljs-keyword">try</span>{
            <span class="hljs-comment">//1、将properties文件夹在到输入流中</span>
            <span class="hljs-type">InputStream</span> <span class="hljs-variable">is</span> <span class="hljs-operator">=</span> DBCPUtil.class.getClassLoader()
				.getResourceAsStream(<span class="hljs-string">"dbcp.properties"</span>);
            <span class="hljs-comment">//2、创建properties对象,用于读取第一步得到的输入流</span>
            <span class="hljs-type">Properties</span> <span class="hljs-variable">ps</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Properties</span>();
            <span class="hljs-comment">//3、使用上述的properties对象,加载本地的properties文件</span>
            ps.load(is);
            <span class="hljs-comment">//4、使用连接池工厂类,创建连接池对象</span>
            <span class="hljs-type">DataSource</span> <span class="hljs-variable">dataSource</span> <span class="hljs-operator">=</span> BasicDataSourceFactory
				.createDataSource(ps);
        }<span class="hljs-keyword">catch</span> (Exception e){
            e.printStackTrace();
        }
    }

    <span class="hljs-comment">//用于从连接池中,获取一个连接对象的操作方法</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Connection <span class="hljs-title function_">getConnection</span><span class="hljs-params">()</span>{
        <span class="hljs-keyword">try</span>{
           <span class="hljs-keyword">return</span> dataSource.getConnection();
        }<span class="hljs-keyword">catch</span> (Exception e){
            e.printStackTrace();
            <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
        }
    }

    <span class="hljs-comment">//用于释放数据库的连接资源</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">close</span><span class="hljs-params">(Connection conn, Statement state,
		 ResultSet resultSet)</span>{
        <span class="hljs-keyword">try</span>{
            <span class="hljs-keyword">if</span>(conn!=<span class="hljs-literal">null</span>){
                conn.close();
                conn = <span class="hljs-literal">null</span>;
            }
            <span class="hljs-keyword">if</span>(state!=<span class="hljs-literal">null</span>){
                state.close();
                state = <span class="hljs-literal">null</span>;
            }
            <span class="hljs-keyword">if</span> (resultSet!=<span class="hljs-literal">null</span>){
                resultSet.close();
                resultSet = <span class="hljs-literal">null</span>;
            }
        }<span class="hljs-keyword">catch</span> (Exception e){
            e.printStackTrace();
        }
    }
}