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

我上一篇文件中用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);
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值