# 内功篇-jdbc连接池实现
# 连接池目的
减少频繁的创建销毁,节省性能开销
# 回顾一下jdbc操作的七个步骤
1.加载驱动
2.获得Connection
3.通过Tcp连接数据库
4.发送sql
5.执行sql,返回结果
6.关闭tcp连接
7.释放Connection
# 如何减少性能开销
分析:通过jdbc操作步骤,我们不难发现4,5是主要操作的,其它都是重复的。
策略:连接复用,在系统初始化就建立好连接。发sql就从连接池拿connection
# 实现
将连接保存在集合中,当需要连接时候从集合中取,释放连接时并不是真正释放,而是归还给集合。达到复用目的
public class ConnectionPool implements DataSource {
private static final String driver = "com.mysql.jdbc.Driver";
private static final String dbUrl = "jdbc:mysql://localhost:3306/db_blog?useSSL=true";
private static final String userName = "root";
private static final String password= "123456";
private LinkedList<Connection> pool;
private Connection getOneConnection() {
Connection connection = null;
try {
Class.forName(driver);
connection = DriverManager.getConnection(dbUrl,userName,password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return connection;
}
@Override
public Connection getConnection() throws SQLException {
if(pool==null){
pool = new LinkedList<>();
for(int i=0;i<2;i++){
pool.add(getOneConnection());
}
}
if(pool.size()<=0){
pool.add(getOneConnection());
}
return pool.remove();
}
public void close(Connection connection){
pool.add(connection);
}
//省略其他实现...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
全量分析 阅读量: