jdbc的c30连接池的使用,用代码写出来,并且每行代码都有注释
时间: 2024-06-06 13:06:46 浏览: 123
// 导入需要的包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
// 创建一个数据库连接池类
public class ConnectionPool {
// 存储连接的链表
private LinkedList<Connection> connectionList = new LinkedList<Connection>();
// 数据库连接信息
private String url = "jdbc:mysql://localhost:3306/test";
private String user = "root";
private String password = "root";
// 初始化连接池大小
private int poolSize = 10;
// 构造函数,初始化连接池
public ConnectionPool() {
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建连接到数据库的连接
for (int i = 0; i < poolSize; i++) {
Connection conn = DriverManager.getConnection(url, user, password);
// 将连接添加到链表中
connectionList.add(conn);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 从连接池中获取一个连接
public synchronized Connection getConnection() {
// 如果链表中没有连接了,就等待
while (connectionList.size() == 0) {
try {
// 等待1秒
wait(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 从链表中获取一个连接
Connection conn = connectionList.removeFirst();
return conn;
}
// 将连接放回连接池
public synchronized void releaseConnection(Connection conn) {
// 将连接添加到链表的末尾
connectionList.addLast(conn);
// 唤醒等待的线程
notifyAll();
}
}
// 使用连接池获取连接
public class TestConnectionPool {
public static void main(String[] args) {
// 创建连接池
ConnectionPool pool = new ConnectionPool();
// 获取连接
Connection conn = pool.getConnection();
// 使用连接执行SQL语句
// ...
// 将连接放回连接池
pool.releaseConnection(conn);
}
}
阅读全文