Servlet开发中JDBC的高级应用(4)

2008-02-23 07:48:22来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


 DBConnectionPool pool = (DBConnectionPool) pools.get(name);
 if (pool != null) {
  pool.freeConnection(con);
 }
}

  三、关闭

  最后,由一个release()方法,用来完好地关闭连接池。每个DBConnectionManager客户必须调用getInstance()方法引用。有一个计数器跟踪客户的数量。方法release()在客户关闭时调用,技术器减1。当最后一个客户释放,DBConnectionManager关闭所有的连接池。

public synchronized void release() {
 // Wait until called by the last client
 if (--clients != 0) {
  return;
 }

 Enumeration allPools = pools.elements();
 while (allPools.hasMoreElements()) {
  DBConnectionPool pool = (DBConnectionPool) allPools.nextElement();
  pool.release();
 }

 Enumeration allDrivers = drivers.elements();
 while (allDrivers.hasMoreElements()) {
  Driver driver = (Driver) allDrivers.nextElement();
  try {
   DriverManager.deregisterDriver(driver);
   log("Deregistered JDBC driver " driver.getClass().getName());
  }
  catch (SQLException e) {
   log(e, "Can not deregister JDBC driver: " driver.getClass().getName());
  }
 }
}

  当所有连接池关闭,所有jdbc驱动程序也被注销。

  连结池的作用

  现在我们结合DBConnetionManager和DBConnectionPool类来讲解servlet中连接池的使用:

  一、首先简单介绍一下Servlet的生命周期:

  Servlet API定义的servlet生命周期如下:

  1、 Servlet 被创建然后初始化(init()方法)。

  2、 为0个或多个客户调用提供服务(service()方法)。

  3、 Servlet被销毁,内存被回收(destroy()方法)。

  二、servlet中使用连接池的实例

  使用连接池的servlet有三个阶段的典型表现是:

  1. 在init()中,调用DBConnectionManager.getInstance()然后将返回的引用保存在实例变量中。

  2. 在sevice()中,调用getConnection(),执行一系列数据库操作,然后调用freeConnection()归还连接。

  3. 在destroy()中,调用release()来释放所有的资源,并关闭所有的连接。

  下面的例子演示如何使用连接池。

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet extends HttpServlet {
 private DBConnectionManager connMgr;

 public void init(ServletConfig conf) throws ServletException {
  super.init(conf);
  connMgr = DBConnectionManager.getInstance();
 }

 public void service(HttpServletRequest req, HttpServletResponse res)
 throws IOException {
  res.setContentType("text/html");
  PrintWriter out = res.getWriter();
  Connection con = connMgr.getConnection("idb");
  if (con == null) {
   out.println("Cant get connection");
   return;
  }
  ResultSet rs = null;
  ResultSetMetaData md = null;
  Statement stmt = null;
  try {
   stmt = con.createStatement();
   rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
   md = rs.getMetaData();
   out.println("Employee data ");
   while (rs.next()) {
    out.println(" ");
    for (int i = 1; i < md.getColumnCount(); i ) {
     out.print(rs.getString(i) ", ");
    }
   }
   stmt.close();
   rs.close();
  }
  catch (SQLException e) {
   e.printStackTrace(out);
  }
  connMgr.freeConnection("idb", con);
 }
 public void destroy() {
  connMgr.release();
  super.destroy();
 }
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:jspSmartUpload上传下载全攻略

下一篇:J2EE初学者需要理解的问题