连接池原理 下载本文

内容发布更新时间 : 2024/9/13 0:08:38星期一 下面是文章的全部内容请认真阅读。

连接池原理

虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,

但是像这篇文章把数据库连接池的内部原理写的这么透彻,注视这么完整, 真是非常难得,让开发人员可以更深层次的理解数据库连接池,真是非常感 谢这篇文章的作者。

import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Enumeration; import java.util.Vector; public class ConnectionPool {

private String jdbcDriver = \数据库驱动

private String dbUrl = \数据 URL

private String dbUsername = \数据库用户名

private String dbPassword = \数据库用户密码

private String testTable = \测试连接是否可用的测试表名,默认没有测试表

private int initialConnections = 10; // 连接池的初始大小

private int incrementalConnections = 5;// 连接池自动增加的大小

private int maxConnections = 50; // 连接池最大的大小

private Vector connections = null; // 存放连接池中数据库连接的向量 , 初始时为 null

// 它中存放的对象为 PooledConnection 型 /**

* 构造函数 *

* @param jdbcDriver String JDBC 驱动类串

* @param dbUrl String 数据库 URL

* @param dbUsername String 连接数据库用户名

* @param dbPassword String 连接数据库用户的密码 * */

public ConnectionPool(String jdbcDriver,String dbUrl,String dbUsername,String dbPassword) {

this.jdbcDriver = jdbcDriver;

this.dbUrl = dbUrl;

this.dbUsername = dbUsername;

this.dbPassword = dbPassword; } /**

* 返回连接池的初始大小 *

* @return 初始连接池中可获得的连接数量 */

public int getInitialConnections() {

return this.initialConnections; } /**

* 设置连接池的初始大小

*

* @param 用于设置初始连接池中连接的数量 */

public void setInitialConnections(int initialConnections) {

this.initialConnections = initialConnections; } /**

* 返回连接池自动增加的大小 、 *

* @return 连接池自动增加的大小

*/

public int getIncrementalConnections() {

return this.incrementalConnections; } /**

* 设置连接池自动增加的大小

* @param 连接池自动增加的大小 */

public void setIncrementalConnections(int incrementalConnections) {

this.incrementalConnections = incrementalConnections; }

/**

* 返回连接池中最大的可用连接数量

* @return 连接池中最大的可用连接数量 */

public int getMaxConnections() {

return this.maxConnections; } /**

* 设置连接池中最大可用的连接数量 *

* @param 设置连接池中最大可用的连接数量值

*/

public void setMaxConnections(int maxConnections) {

this.maxConnections = maxConnections; } /**

* 获取测试数据库表的名字 *

* @return 测试数据库表的名字 */

public String getTestTable() {

return this.testTable;

}

/**

* 设置测试表的名字

* @param testTable String 测试表的名字 */

public void setTestTable(String testTable) {

this.testTable = testTable; } /** *

* 创建一个数据库连接池,连接池中的可用连接的数量采用类成员

* initialConnections 中设置的值 */

public synchronized void createPool() throws Exception {

// 确保连接池没有创建

// 如果连接池己经创建了,保存连接的向量 connections 不会为空

if (connections != null) {

return; // 如果己经创建,则返回

}

// 实例化 JDBC Driver 中指定的驱动类实例

Driver driver = (Driver) (Class.forName(this.jdbcDriver).newInstance());

DriverManager.registerDriver(driver); // 注册 JDBC 驱动程序