APP下载

WEB开发中数据库连接池的使用技巧

2019-12-19王磊孟祥武李平

数码设计 2019年3期
关键词:李平王磊调用

王磊,孟祥武,李平

WEB开发中数据库连接池的使用技巧

王磊,孟祥武,李平

(烟台海港信息通信有限公司,山东烟台, 264000)

本文结合自己在烟台港生产管理系统中多年的软件开发经验,创造性的提出一种性能更加优异的数据库连接池技术,大大提高了港口业务系统海量数据的访问性能,具有重要的推广价值。

Web开发;JSP;数据库连接池

1 引言

随着信息技术的进步,B/S结构开发的各种系统应用得愈发广泛,港口很多系统都使用B/S结构进行WEB开发的,而这其中如何连接数据库便成为无法绕开的问题。传统的JDBC连接方式固然应用简单,但在面对海量的数据访问要求时,无论在资源配置还是反应时间上都显得力不从心,于是表现更加优异的数据库连接池技术便成为非常有利的选择。

2 问题的提出

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

3 问题的原因与解决方法

为了更好的理解和使用数据库连接池,我们可以尝试封装一个数据库连接池类,并在开发过程中调用它,这样我们更加灵活的掌握数据库连接池技术。关键代码如下:

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 驱动程序

// 创建保存连接的向量 , 初始时有 0 个元素

connections = new Vector();

// 根据 initialConnections 中设置的值,创建连接。

createConnections(this.initialConnections);

System.out.println("create pool");

}

然后创建由 numConnections 指定数目的数据库连接,并把这些连接放入 connections 向量中。

private void createConnections(int numConnections) throws SQLException {

// 循环创建指定数目的数据库连接

for (int x = 0; x < numConnections; x++) {

System.out.println(this.connections.size() + "," + this.maxConnections);

if (this.maxConnections > 0 && this.connections.size() >= this.maxConnections) {

System.out.println("连接数己经达到最大");

break;

}

try {

connections.addElement(new PooledConnection(newConnection()));

} catch (SQLException e) {

System.out.println(" 创建数据库连接失败! " + e.getMessage());

throw new SQLException();

}

System.out.println(" 数据库连接己创建 ......");

}

}

创建一个新的数据库连接并通过调用 getFreeConnection() 函数返回一个可用的数据库连接,使用完毕关闭连接。

再创建一个DBManager来对连接池进行相应的控制。关键代码如下:

public DBManager() {

if (inst != null)

return;

// TODO Auto-generated constructor stub

String connStr = String.format("jdbc:mysql://%s:%d/%s", Config.getInstance().mysqlHost, Config.getInstance().mysqlPort,

Config.getInstance().mysqlDB);

connectionPool = new ConnectionPool("com.mysql.jdbc.Driver", connStr, Config.getInstance().mysqlUser, Config.getInstance().mysqlPassword);

try {

connectionPool.createPool();

inst = this;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static PooledConnection getConnection() {

if (inst == null)

new DBManager();

try {

conn = connectionPool.getConnection();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

这样就完成了一个数据库连接池类的封装,我们可以在程序中加以调用,满足所需要的数据库连接要求。

4 结束语:

B/S结构系统开发的过程中,数据库的连接效率是非常重要的技术指标,在工作与学习的过程中不断的研究与使用,会极大地提高自己的开发水准,满足用户不断提高的要求与体验。

[1] 刘晓华、周慧贞.JSP开发应用详解. 北京:电子工业出版社

[2] Stephens.数据库设计. 北京:机械工业出版社

[3] 赵松涛. Oracle 9i中文版基础培训教程. 北京:人民邮电出版社.

[4] 杨瑶.新课程研究(下旬刊)基于Java的Web数据库连接池技术研究.2008

[5] 周彩兰,陈才贤.武汉理工大学学报(信息与管理工程版) 2004

Application skills of database connection pool in WEB development

Wang Lei,Meng,Xiangwu,Li Ping

(Yantai SeaPort Information Communication Co., Ltd. , Yantai 264000, China)

Combining with many years of software development experience in Yantai Port production management system, this paper creatively proposes a database connection pool technology with better performance, which greatly improves the access performance of massive data in port business system and has important popularization value.

Web development JSP database connection pool

10.19551/j.cnki.issn1672-9129.2019.03.007

TP311.10

A

1672-9129(2019)03-0021-03

王磊(1972-),男,主要研究方向或从事的工作:港口生产系统管理及推广应用。E-mail:bianjibu20080808@163.com

猜你喜欢

李平王磊调用
李平,漫游在文坛的梦境
四季的美
Carriage to eternity: image of death in Dickinson and Donne
第三个小板凳
系统虚拟化环境下客户机系统调用信息捕获与分析①
作品选登
不再被“圆”困住
联墨双馨
“根本停不下来”
基于属性数据的系统调用过滤方法