java-数据库库连接池使用JDBC查询封装返回对象列表数据(本次内容针对PGSQL)
PGConnectionPool:
import com.PostgreSQLConfig;
import org.postgresql.Driver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.*;
import java.util.Enumeration;
import java.util.Vector;
/**
* @author XXX
* @ClassName:
* @Description:
* @date 2021/2/6 9:25
*/
public class PGConnectionPool {
private static final Logger logger = LoggerFactory.getLogger(PGConnectionPool.class);
private String pgsqlDriver = ""; // 数据库驱动
private String pgsqlUrl = ""; // 数据 URL
private String pgsqlUserName = ""; // 数据库用户名
private String pgsqlPassword = ""; // 数据库用户密码
private String testTable = ""; // 测试连接是否可用的测试表名,默认没有测试表
private int initialConnections = 5; // 连接池的初始大小
private int incrementalConnections = 1;// 连接池自动增加的大小
private int maxConnections = 10; // 连接池最大的大小
private Vector connections = null; // 存放连接池中数据库连接的向量 , 初始时为 null
/**
* 构造函数
*
* @param config 数据库连接配置参数
*/
public PGConnectionPool(PostgreSQLConfig config) {
this.pgsqlDriver = config.pgsqlDriver;
this.pgsqlUrl = config.pgsqlUrl;
this.pgsqlUserName = config.pgsqlUser;
this.pgsqlPassword = config.pgsqlPwd;
this.testTable = config.testTable; // 测试连接是否可用的测试表名,默认没有测试表
if (config.incrementalConnections != null && config.incrementalConnections > 0) {
this.initialConnections = config.incrementalConnections; // 连接池的初始大小
} else {
this.initialConnections = 5; // 连接池的初始大小
}
if (config.incrementalConnections != null && config.incrementalConnections > 0) {
this.incrementalConnections = config.incrementalConnections; // 连接池自动增加的大小
} else {
this.incrementalConnections = 1; // 连接池自动增加的大小
}
if (config.maxConnections != null) {
this.maxConnections = config.maxConnections; // 连接池最大的大小
} else {
this.maxConnections = 10; // 连接池最大的大小
}
}
/**
* 创建一个数据库连接池,连接池中的可用连接的数量采用类成员 initialConnections 中设置的值
*/
public synchronized void createPool() throws Exception {
// 确保连接池没有创建
// 如果连接池己经创建了,保存连接的向量 connections 不会为空
if (connections != null) {
return; // 如果己经创建,则返回
}
// 实例化 JDBC Driver 中指定的驱动类实例
Driver driver = (Driver) (Class.forName(this.pgsqlDriver).newInstance());
DriverManager.registerDriver(driver); // 注册 JDBC 驱动程序
// 创建保存连接的向量 , 初始时有 0 个元素
connections = new Vector();
// 根据 initialConnections 中设置的值,创建连接。
createConnections(this.initialConnections);
logger.info("创建数据库连接池完成...");
}
/**
* 创建由 numConnections 指定数目的数据库连接 , 并把这些连接 放入 connections 向量中
*
* @param numConnections 要创建的数据库连接的数目
*/
private void createConnections(int numConnections) throws SQLException {
// 循环创建指定数目的数据库连接
for (int x = 0; x < numConnections; x++) {
// 是否连接池中的数据库连接的数量己经达到最大?最大值由类成员 maxConnections
// 指出,如果 maxConnections 为 0 或负数,表示连接数量没有限制。
// 如果连接数己经达到最大,即退出。
if (this.maxConnections > 0
&& this.connections.size() >= this.maxConnections) {
break;
}
// 增加一个连接到连接池中(向量 connections 中)
try {
connections.addElement(new PooledConnection(newConnection()));
} catch (SQLException e) {
logger.error(" 创建数据库连接失败! " + e.getMessage());
throw new SQLException();
}
}
}
/**
* 创建一个新的数据库连接并返回它
*
* @re