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();
}
}
}