java手写数据库连接池
时间: 2023-11-04 13:53:38 浏览: 99
以下是一个简单的手写 Java 数据库连接池的示例代码,仅供参考:
```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ConnectionPool {
private String url; // 数据库 URL
private String user; // 数据库用户名
private String password; // 数据库密码
private int initialSize; // 初始连接池大小
private int maxSize; // 最大连接池大小
private int currentSize = 0; // 当前连接池大小
private List<Connection> connections = new ArrayList<>(); // 连接池
public ConnectionPool(String url, String user, String password, int initialSize, int maxSize) {
this.url = url;
this.user = user;
this.password = password;
this.initialSize = initialSize;
this.maxSize = maxSize;
initConnectionPool();
}
private void initConnectionPool() {
for (int i = 0; i < initialSize; i++) {
try {
Connection conn = DriverManager.getConnection(url, user, password);
connections.add(conn);
currentSize++;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public synchronized Connection getConnection() {
if (connections.isEmpty()) {
if (currentSize < maxSize) {
try {
Connection conn = DriverManager.getConnection(url, user, password);
connections.add(conn);
currentSize++;
} catch (SQLException e) {
e.printStackTrace();
}
} else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Connection conn = connections.remove(0);
return conn;
}
public synchronized void releaseConnection(Connection conn) {
if (connections.size() < initialSize) {
connections.add(conn);
} else {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
notifyAll();
}
}
```
使用该连接池的示例代码:
```
public class TestConnectionPool {
public static void main(String[] args) {
ConnectionPool connectionPool = new ConnectionPool("jdbc:mysql://localhost:3306/test", "root", "password", 5, 10);
Connection conn = connectionPool.getConnection();
// do something with conn
connectionPool.releaseConnection(conn);
}
}
```
注意事项:
- 该示例代码未进行线程安全性和性能优化,仅供参考。
- 在实际使用中,应该将连接池作为一个单例对象,避免多次创建连接池。
- 为了防止数据库连接的泄露,应该在使用完连接后及时释放连接。
- 在使用连接池时,应该使用 try-finally 语句来确保连接被释放。
阅读全文