java自己写数据库连接池
时间: 2023-05-31 20:01:25 浏览: 65
数据库连接池是一种优化数据库访问的方式,它会通过预先创建一定数量的数据库连接并将其存储在连接池中,从而避免每次访问数据库时都需要创建和销毁连接,提高了数据库的访问效率和性能。
以下是一个简单的Java数据库连接池的实现:
1. 创建一个连接池类,该类包含了连接池的基本属性和方法,如最大连接数、最小连接数、当前连接数、连接池列表等:
```
public class ConnectionPool {
private String url; // 数据库连接URL
private String username; // 数据库用户名
private String password; // 数据库密码
private int maxConnections; // 最大连接数
private int minConnections; // 最小连接数
private List<Connection> connections; // 连接池列表
// 构造方法,初始化连接池
public ConnectionPool(String url, String username, String password, int maxConnections, int minConnections) {
this.url = url;
this.username = username;
this.password = password;
this.maxConnections = maxConnections;
this.minConnections = minConnections;
connections = new ArrayList<Connection>();
for (int i = 0; i < minConnections; i++) {
connections.add(createConnection());
}
}
// 获取连接
public synchronized Connection getConnection() {
Connection conn = null;
if (connections.size() > 0) {
conn = connections.remove(0);
} else if (connections.size() < maxConnections) {
conn = createConnection();
}
return conn;
}
// 释放连接
public synchronized void releaseConnection(Connection conn) {
if (connections.size() < minConnections) {
connections.add(conn);
} else {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 创建连接
private Connection createConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
```
2. 在使用数据库时,从连接池中获取连接并执行操作,操作完成后释放连接:
```
// 获取连接
Connection conn = pool.getConnection();
// 执行操作
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM table");
while (rs.next()) {
// 处理结果
}
// 释放连接
pool.releaseConnection(conn);
```
需要注意的是,以上实现方式仅为示例,实际应用中还需要考虑连接池的线程安全性、连接的有效性检测、连接的超时时间等问题。