Servlet中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();

}

}

时间: 2024-11-02 12:14:09

Servlet中jdbc应用高级篇(五)的相关文章

Servlet中jdbc应用高级篇

servlet|高级  JDBC使用数据库URL来说明数据库驱动程序.数据库URL类似于通用的URL,但SUN 在定义时作了一点简化,其语法如下: Jdbc::[node]/[database] 其中子协议(subprotocal)定义驱动程序类型,node提供网络数据库的位置和端口号,后面跟可选的参数.例如: String url="jdbc:inetdae:myserver:1433?language=us-english&sql7=true" 表示采用inetdae驱动程

Servlet中jdbc应用高级篇(二)

一个动态的网站频繁地从数据库中取得数据来构成html页面.每一次请求一个页面都会发生数据库操作.但连接数据库却是一个需要消耗大量时间的工作,因为请求连接需要建立通讯,分配资源,进行权限认证.这些工作很少能在一两秒内完成.所以,建立一个连接,然后再后续的查询中都使用此连接会大大地提高性能.因为servlet可以在不同的请求间保持状态,因此采用数据库连接池是一个直接的解决方案. Servlet在服务器的进程空间中驻留,可以方便而持久地维护数据库连接.接下来,我们介绍一个完整的连接池的实现.在实现中,

Servlet中jdbc应用高级篇(三)

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

Servlet中jdbc应用高级篇(四)

DBConnetionManager的构造函数是私有函数,以避免其他类创建其实例. private DBConnectionManager() { init(); } DBConnetionManager的客户调用getInstance()方法来得到该类的单一实例的引用. static synchronized public DBConnectionManager getInstance() { if (instance == null) { instance = new DBConnectio

Servlet中jdbc应用高级篇(一)

JDBC使用数据库URL来说明数据库驱动程序.数据库URL类似于通用的URL,但SUN 在定义时作了一点简化,其语法如下: Jdbc::[node]/[database] 其中子协议(subprotocal)定义驱动程序类型,node提供网络数据库的位置和端口号,后面跟可选的参数.例如: String url="jdbc:inetdae:myserver:1433?language=us-english&sql7=true" 表示采用inetdae驱动程序连接1433端口上的m

Servlet开发中JDBC的高级应用

servlet|高级 连结数据库 JDBC使用数据库URL来说明数据库驱动程序.数据库URL类似于通用的URL,但SUN 在定义时作了一点简化,其语法如下: Jdbc::[node]/[database] 其中子协议(subprotocal)定义驱动程序类型,node提供网络数据库的位置和端口号,后面跟可选的参数.例如: String url="jdbc:inetdae:myserver:1433?language=us-english&sql7=true" 表示采用inetd

c#扩展方法奇思妙用高级篇五:ToString(string format) 扩展

在.Net中,System.Object.ToString()是用得最多的方法之一,ToString()方法在Object类中被定义为virtual,Object类给了它一个默认实现: 1 public virtual string ToString() 2 { 3 return this.GetType().ToString(); 4 } .Net中原生的class或struct,如int,DateTime等都对它进行重写(override),以让它返回更有价值的值,而不是类型的名称.合理重写

java-使用servlet,jdbc将mysql中数据显示在jsp页面中,且实现直接更新数据库数据

问题描述 使用servlet,jdbc将mysql中数据显示在jsp页面中,且实现直接更新数据库数据 我从网上找了几篇,大多都是在JSP操作的,我想仿照http://blog.csdn.net/kakukeme/article/category/819230 该网址的例子做,但是数据却没有显示出来,所以想问下各位有没完整的可以运行的实例,给我一个. 解决方案 参考一下吧:http://download.csdn.net/detail/qq_19558705/9393750 解决方案二: ?用se

(求助贴)关于servlet中executeQuery()的问题

问题描述 我在servlet中写了一段用户登录的后台代码,javabean的名字是Login.java每次执行,都是在executeQuery()那边出错,因为ResultSet对象rs.next()老是为FALSE,各位大侠看看到底是怎么回事啊.publicvoidinit(ServletConfigconfig)throwsServletException{super.init(config);try{Class.forName("com.microsoft.jdbc.sqlserver.S