连接池的概念
为应用程序创建固定数量的连接对象,保存在池中进行复用。每次访问时从池中获取已存在,使用完毕后,返回池中。
连接池的意义
首先我们要明白,“建立数据库连接”是相当耗费资源和时间的,同时,建立数据库连接的数量也是有限的(所以在初学的时候,很多忘了写关闭连接的朋友在刷新应用几次之后发现控制台报错,还找不到原因,但是重启一下电脑或者重开一下Eclipse就好了,这就是因为数据库连接数量的原因,xe版的oracle最多是在7个到10个左右的样子)。
为什么建立数据库连接是相当耗费资源和时间的
首先建立TCP连接;然后TCP协议三次握手的发送与相应;客户端的账户验证,服务器返回确认;用户验证后,需要传输相关连接变量如是否自动提交事务的设置等,会有多次数据的交互,然后才能执行真正的数据查询和更新等操作。
连接池的作用
连接池是采用了预先建立多个数据库连接对象,然后放到连接池里,当有客户端请求时,取出一个连接对象为客户端服务,当请求完成时,客户端调用.close()方法,将连接对象放回池中。 在普通的数据库连接中,客户端得到的是物理连接,在连接池中,客户端得到的是连接对象,从使用开始到使用结束,连接对象的物理连接始终没有关闭,所以我们在一定程度上减少了建立连接所需要的时间,这对多使用、高并发的网站十分有利。
连接池的使用
初学者,连接池通常要引入相关jar包
![](https://i-blog.csdnimg.cn/blog_migrate/749d094e4eaaaa899f2bf573754e4527.png)
然后需要配置一些诸如提交事务等的属性(注意与JDBC的配置不同的是driverClassName,多了一个class)
在Utils文件里需要如下几步进行获取连接对象(通常获取连接对象的时候是写在getConnection方法里,然后加上一些判断条件,当客户端没有结束连接的时候,获取的连接是上一次的事务的连接(利用ThreadLoacl把事务与线程绑到一起),当第一次访问时,则是ds.getConnection())
getConnection方法