连接池的概述
管理数据库连接
数据库连接池的作用
提高项目性能
没有使用连接池技术,每操作一次都需要连接一次,用完就关闭(销毁),但是数据库连接是一个很消耗资源的过程,所以会导致项目性能低
使用连接池就是在连接池初始化的时候存放一定数量的连接(已经完成数据库的连接),用的时候通过方法获取(直接拿就好),不用的时候归还连接即可(只是释放连接并没有销毁,方便下一个操作获取u需要重新连接)。
连接池好比一个贷款公司,起初有1000块钱,A来借了200办事前,B来又借了200办事情,A办完事情后还了200,其他人又可以继续借,所以1000块钱能反复的借给不同的客户
自定义数据库连接池
/**
* 简易的连接池
* @author Administrator
*
*/
public class MyDataSource {
static LinkedList<Connection> pool=new LinkedList<>();
static{
//初始化的时候 需要放入3个连接
for (int i = 0; i < 3; i++) {
try {
Connection conn = JdbcUtils.getConnection();
pool.addLast(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//从连接池中获取连接
public static Connection getConnection(){
//获取连接的时候需要判断list是否为空
if(pool.isEmpty()){
//在添加2个连接进去
for (int i = 0; i < 3; i++) {
try {
Connection conn = JdbcUtils.getConnection();
pool.addLast(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
System.out.println("从池中获取一个连接");
return pool.removeFirst();
}
//归还连接的方法
public static void addBack(Connection conn){
//将conn放入到list的最后面即可
pool.addLast(conn);
System.out.println("连接已归还");
}
}
自定义连接池:
增强方法:
1.继承
2.装饰者模式(静态代理)
3.动态代理
///
装饰者模式(静态代理)
1.装饰者和被装饰者实现同一个接口或者继承同一个类
2.在装饰者中要有被装饰者的引用
3.对需要增强的方法进行加强
4.对不需要加强的方法调用原来方法
///
常见连接池:
dbcp:
c3p0:★
配置文件:
名称:c3p0.properties或者 c3p0-config.xml
位置:src下
使用:
new ComboPooledDataSource()
dbutils:
工具类,封装了jdbc的操作.
使用步骤:
1.导入jar包
2.创建queryrunner类
3.编写sql
4.执行sql
queryrunner:操作sql语句
构造器:
new queryrunner()
方法:
query(…)
update(…)
ResultSetHandler:封装结果集
BeanHandler
BeanListHandler
MapListHandler
ScalarHandler