java写一数据库个连接池
时间: 2024-05-12 22:09:03 浏览: 117
用java写的一个数据库连接池
5星 · 资源好评率100%
以下是一个简单的Java数据库连接池实现:
1. 创建一个数据库连接池类 DBConnectionPool,该类包含以下属性和方法:
属性:
- String url:数据库连接地址
- String username:数据库用户名
- String password:数据库密码
- int initialSize:连接池初始大小
- int maxSize:连接池最大大小
- int currentSize:当前连接池大小
- List<Connection> connections:连接池中的连接列表
方法:
- DBConnectionPool(String url, String username, String password, int initialSize, int maxSize):构造函数,初始化连接池
- synchronized Connection getConnection():获取一个连接
- synchronized void releaseConnection(Connection connection):释放一个连接
- synchronized void closeAll():关闭所有连接
2. 在构造函数中初始化连接池,创建 initialSize 个连接,并将它们加入连接池中。
3. 在 getConnection 方法中,首先判断连接池中是否有可用连接,如果有,则直接返回一个连接;如果没有,则判断当前连接池大小是否已经达到最大值,如果是,则等待一段时间再尝试获取连接;如果不是,则创建一个新的连接,并将其加入连接池中。
4. 在 releaseConnection 方法中,将指定的连接返回连接池。
5. 在 closeAll 方法中,遍历连接池中的所有连接,并将它们都关闭。
以下是 DBConnectionPool 类的代码实现:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DBConnectionPool {
private String url;
private String username;
private String password;
private int initialSize;
private int maxSize;
private int currentSize;
private List<Connection> connections;
public DBConnectionPool(String url, String username, String password, int initialSize, int maxSize) {
this.url = url;
this.username = username;
this.password = password;
this.initialSize = initialSize;
this.maxSize = maxSize;
this.currentSize = 0;
this.connections = new ArrayList<Connection>();
initialize();
}
private void initialize() {
try {
for (int i = 0; i < initialSize; i++) {
Connection connection = DriverManager.getConnection(url, username, password);
connections.add(connection);
currentSize++;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public synchronized Connection getConnection() {
Connection connection = null;
if (connections.size() > 0) {
connection = connections.remove(0);
} else if (currentSize < maxSize) {
try {
connection = DriverManager.getConnection(url, username, password);
currentSize++;
} catch (SQLException e) {
e.printStackTrace();
}
}
return connection;
}
public synchronized void releaseConnection(Connection connection) {
connections.add(connection);
}
public synchronized void closeAll() {
for (Connection connection : connections) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
使用时可以通过以下代码来获取连接池中的连接:
```java
DBConnectionPool pool = new DBConnectionPool(url, username, password, initialSize, maxSize);
Connection connection = pool.getConnection();
```
使用完连接后,需要将连接归还连接池:
```java
pool.releaseConnection(connection);
```
最后,在程序退出前,需要调用 closeAll 方法来关闭连接池中的所有连接:
```java
pool.closeAll();
```
阅读全文