[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);
}
}
顺手编写了一个自定义的数据库连接池. 此处说明一下,为了方便直观,我没有去重写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);
}
}
相关文章推荐
- 今天自己写的MySQL自定义JDBCUtils代码编写过程详解.
- 深入mysql创建自定义函数与存储过程的详解
- 深入mysql创建自定义函数与存储过程的详解
- mysql 存储过程、存储过程嵌套、自定义函数代码示例
- [MySQL]利用apache第三方jar包,编写的的JDBCUtils工具类过程及内容详解.附带配置文件的详细注解.
- centos6.4+nginx+mysql+php+phpmyadmin整合过程详解
- MySQL关闭过程详解和安全关闭MySQL的方法
- 心得1--自定义连接池与开源组织编写的连接池介绍
- MySQL存储过程详解
- Effective Objective-C 2.0 编写高质量iOS与OS X代码 在既有类中使用关联对象存放自定义数据
- 使用git了解代码编写过程
- mysql的存储过程与自定义函数
- mysql存储过程详解
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解
- mysql安装过程详解
- mysql5.7.17安装过程 图文详解
- HBase 协处理器编程详解,第二部分:客户端代码编写
- EZW算法的过程详解和Matlab代码(1)构建扫描次序表(修正小波树结构)
- 编写代码过程中,注意事项