AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > JSP

Servlet中jdbc应用高级篇(三)

51自学网 http://www.wanshiok.com

  DBConnectionPool类代表一个由url标识的数据库连接池。前面,我们已经提到,jdbc的url由三个部分组成:协议标识(总是jdbc),子协议标识(例如,odbc.oracle),和数据库标识(跟特定的数据库有关)。连接池也具有一个名字,供客户程序引用。另外,连接池还有一个用户名,一个密码和一个最大允许连接数。如果web应用允许所有的用户使用某些数据库操作,而另一些操作是有限制的,则可以创建两个连接池,具有同样的url,不同的user name和password,分别处理两类不同的操作权限。现把DBConnectionPool详细介绍如下:

  一、DBConnectionPool的构造


  构造函数取得上述的所有参数:

public DBConnectionPool(String name, String URL, String user,

String password, int maxConn) {

this.name = name;

this.URL = URL;

this.user = user;

this.password = password;

this.maxConn = maxConn;

}

  将所有的参数保存在实例变量中。


  二、从池中打开一个连接


  DBConnectionPool提供两种方法来检查连接。两种方法都返回一个可用的连接,如果没有多余的连接,则创建一个新的连接。如果最大连接数已经达到,第一个方法返回null,第二个方法则等待一个连接被其他进程释放。

public synchronized Connection getConnection() {

Connection con = null;

if (freeConnections.size() > 0) {

// Pick the first Connection in the Vector

// to get round-robin usage

con = (Connection) freeConnections.firstElement();

freeConnections.removeElementAt(0);

try {

if (con.isClosed()) {

log("Removed bad connection from " + name);

// Try again recursively

con = getConnection();

}

}

catch (SQLException e) {

log("Removed bad connection from " + name);

// Try again recursively

con = getConnection();

}

}

else if (maxConn == 0 || checkedOut < maxConn) {

con = newConnection();

}

if (con != null) {

checkedOut++;

}

return con;

}

  所有空闲的连接对象保存在一个叫freeConnections 的Vector中。如果存在至少一个空闲的连接,getConnection()返回其中第一个连接。下面,将会看到,进程释放的连接返回到freeConnections的末尾。这样,最大限度地避免了数据库因一个连接不活动而意外将其关闭的风险。

  再返回客户之前,isClosed()检查连接是否有效。如果连接被关闭了,或者一个错误发生,该方法递归调用取得另一个连接。

  如果没有可用的连接,该方法检查是否最大连接数被设置为0表示无限连接数,或者达到了最大连接数。如果可以创建新的连接,则创建一个新的连接。否则,返回null。

  方法newConnection()用来创建一个新的连接。这是一个私有方法,基于用户名和密码来确定是否可以创建新的连接。

private Connection newConnection() {

Connection con = null;

try {

if (user == null) {

con = DriverManager.getConnection(URL);

}

else {

con = DriverManager.getConnection(URL, user, password);

}

log("Created a new connection in pool " + name);

}

catch (SQLException e) {

log(e, "Can not create a new connection for " + URL);

return null;

}

return con;

}

  jdbc的DriverManager提供一系列的getConnection()方法,可以使用url和用户名,密码等参数创建一个连接。

<

 

 

 
上一篇:Servlet中jdbc应用高级篇(四)  下一篇:JBuilder2005实战JSP之创建数据库表