您的位置:首页 > 数据库 > MySQL

[MySQL]自定义连接池代码的编写过程及详解

2017-03-30 21:19 435 查看
我上一篇文件中用apache的jar包自定义了一个JDBCUtils工具类,其中提到了数据库连接池,

顺手编写了一个自定义的数据库连接池. 此处说明一下,为了方便直观,我没有去重写connection接口中的close方法, 再使用被数据库连接池时,如果需要关流,是需要利用连接池类调用静态方法colse() 传参实现, 如果想要使用connection对象直接调用close()方法实现回归连接池,需要用到装饰设计的相关知识,由于篇幅过长,且不易初学者理解,我在此处不详细说明,有兴趣,可以留言讨论.共同进步,package MyPool;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;

/*
* * MyPool 类是一个数据库连接池类:
* 1、可以保存若干连接 --------------- 使用集合存储
* 2、提供一个方法,获取相关连接 ------- 将集合的连接移出给调用者
* 3、使用完连接,提供一个方法,再存回该连接池 ----- 就是将连接存回集合
*/
public class MyPool {
// 第一步:创建一个集合,因为这个集合最长用到的是增删,而不是查询,所以优先选择LinkedList,池中存储的是数据库连接对象,所以泛型为connection
public static LinkedList<Connection> pool = new LinkedList<Connection>();

// 第二步:有了池子就要向池子里加对象,那么就要先写一个获取数据库连接对象的方法
public static Connection getCon() {
// 第三步:因为下一步获取数据库连接对象的时候,需要处理异常,为了防止异常时导致con没有赋值无法使用,提前将con定义在try/catch外
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("url", "user", "password");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
return con;
}

// 第四步:有了获取connection对象的方法,我们就可以先获取几个数据库连接加入到连接池中,我们先加4个进去
public static void addCon() {
int count = 1;
if (count < 5) {
pool.add(getCon());
count++;
}
}

// 第五步:从连接池中获取一个连接,因为拿出来后,没返回前,这个连接会被短暂占用,所以需要调用remove方法.
public static Connection getConByPool() {
// 第六步,此时需要判断,如果池中有,就从池中拿,如果池中没有,那么就创建一个.
if (!pool.isEmpty()) {
return pool.remove();
} else {
return getCon();
}
}

// 第七步: 连接用完后,需要将连接放回来.
public static void close(Connection con) {
pool.add(con);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: