java手写数据库连接池
时间: 2023-10-14 12:20:37 浏览: 44
以下是一个简单的Java手写数据库连接池的示例代码:
```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 static final String URL = "jdbc:mysql://localhost:3306/test";
private static final String USERNAME = "root";
private static final String PASSWORD = "password";
private static final int INITIAL_POOL_SIZE = 5;
private static final int MAX_POOL_SIZE = 10;
private List<Connection> connections;
public ConnectionPool() {
connections = new ArrayList<>(INITIAL_POOL_SIZE);
try {
for (int i = 0; i < INITIAL_POOL_SIZE; i++) {
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
connections.add(connection);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public synchronized Connection getConnection() {
Connection connection = null;
if (connections.size() > 0) {
connection = connections.remove(connections.size() - 1);
} else if (connections.size() < MAX_POOL_SIZE) {
try {
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
}
return connection;
}
public synchronized void releaseConnection(Connection connection) {
if (connections.size() < MAX_POOL_SIZE) {
connections.add(connection);
} else {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public synchronized void closeAllConnections() {
for (Connection connection : connections) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
connections.clear();
}
}
```
这个连接池使用了一个ArrayList作为连接池,使用synchronized关键字保证线程安全。连接池的初始化和连接获取、释放以及连接池关闭的方法都已经实现。使用时只需要创建一个ConnectionPool对象,并调用getConnection()方法获取连接,调用releaseConnection()方法释放连接,最后调用closeAllConnections()方法关闭连接池即可。