jsp中实现连接池(Connection Pool)

来源:互联网 发布:音色 算法 编辑:程序博客网 时间:2024/06/08 16:22
jsp中实现连接池(Connection Pool)

发布日期:2002-7-9  发 布 者:51jsp.net  
    在JSP里有两种实现的办法,一种是用JNDI(Java Naming Directory Interface),这可能和应用服务器有关,如果是Resin,先在resin.conf里定义  
<resource-ref>  
  <res-ref-name>jdbc/oracle</res-ref-name>  
  <res-type>javax.sql.DataSource</res-type>  
  <init-param driver-name="oracle.jdbc.driver.OracleDriver"/>  
  <init-param url="jdbc:oracle:thin:@192.168.1.1:1521:oracle"/>  
  <init-param user="system"/>  
  <init-param password="manager"/>  
  <init-param max-connections="20"/>  
  <init-param max-idle-time="30"/>  
</resource-ref>  
如果为Tomcat,在Server.xml里面定义,有关的资料可以查文档,然后在jsp里这样用  
try{  
      javax.naming.Context env = (Context)new InitialContext().lookup("java:comp/env");  
      javax.sql.DataSource pool=(javax.sql.DataSource) env.lookup("jdbc/oracle");  
       }catch(Exception e){System.err.println("Exception error:"+e.getMessage());}  

     try {  
      Connection conn = pool.getConnection();  
       }catch(Exception e){System.out.println("Exception error:"+e.getMessage());}  
    通过这段代码,你就获得从连接池里获得了一个连接conn。如果想用普通的连接池,那只能用JavaBean了,先写一个ConnectionPool的java的类,然后直接从连接池中获得连接,下面是我一个连接池的JavaBean 
ConnectionPool.java如下: 

import java.io.PrintStream; 
import java.sql.Connection; 
import java.util.Vector; 

// Referenced classes of package com.ilovejsp.sql: 
//            DataSource, PooledConnection 

public class ConnectionPool 
{   
    private Vector pool; 
    private int size; 
    DataSource db; 

    public ConnectionPool() 
    { 
        pool = null; 
        size = 0; 
        db = new DataSource(); 
    } 

    public void setSize(int value) 
    { 
        if(value > 1) 
            size = value; 
    } 

    public int getSize() 
    { 
        return size; 
    } 

    public synchronized void initPool() 
        throws Exception 
    { 
        try 
        { 
            for(int x = 0; x < size; x++) 
            { 
                Connection conn = db.getConnection(); 
                if(conn != null) 
                { 
                    PooledConnection pcon = new PooledConnection(conn); 
                    addConnection(pcon); 
                } 
            } 

        } 
        catch(Exception e) 
        { 
            System.err.println(e.getMessage()); 
        } 
    } 

    private void addConnection(PooledConnection pcon) 
    { 
        if(pool == null) 
            pool = new Vector(size); 
        pool.addElement(pcon); 
    } 

    public synchronized void releaseConnection(Connection conn) 
    { 
        int x = 0; 
        do 
        { 
            if(x >= pool.size()) 
                break; 
            PooledConnection pcon = (PooledConnection)pool.elementAt(x); 
            if(pcon.getConnection() == conn) 
            { 
                System.err.println("Release Connection".concat(String.valueOf(String.valueOf(x)))); 
                pcon.setInUse(false); 
                break; 
            } 
            x++; 
        } 
        while(true); 
    } 

    public synchronized Connection getConnection() 
        throws Exception 
    { 
        PooledConnection pcon = null; 
        for(int x = 0; x < pool.size(); x++) 
        { 
            pcon = (PooledConnection)pool.elementAt(x); 
            if(!pcon.inUse()) 
            { 
                pcon.setInUse(true); 
                return pcon.getConnection(); 
            } 
        } 

        try 
        { 
            Connection conn = db.getConnection(); 
            pcon = new PooledConnection(conn); 
            pcon.setInUse(true); 
            pool.addElement(pcon); 
        } 
        catch(Exception e) 
        { 
            System.err.println("Exception error:".concat(String.valueOf(String.valueOf(e.getMessage())))); 
        } 
        return pcon.getConnection(); 
    } 

    public synchronized void emptyPool() 
    { 
        for(int x = 0; x < pool.size(); x++) 
        { 
            System.err.println("Closing Jdbc Connection".concat(String.valueOf(String.valueOf(x)))); 
            PooledConnection pcon = (PooledConnection)pool.elementAt(x); 
            if(!pcon.inUse()) 
            { 
                pcon.close(); 
                continue; 
            } 
            try 
            { 
                Thread.sleep(3000L); 
                pcon.close(); 
            } 
            catch(Exception e) 
            { 
                System.out.println("Exception :".concat(String.valueOf(String.valueOf(e.getMessage())))); 
            } 
        } 

        db.close(); 
    } 

testpool.jsp内容如下: 
<%@ page language="java" contentType="text/html;charset=gb2312"%> 
<%@  page import="java.sql.*"%> 

<HTML> 
<HEAD> 
<TITLE>系统数据信息</TITLE> 
</HEAD> 
<BODY> 
<%ConnectionPool db=new ConnectionPool(); 
Connection conn=db.getConnection(); 
Statement stmt=conn.createStatement(); 
String sql1="select * from pg_database "; 

ResultSet rs=stmt.executeQuery(sql1); 
%> 
<TABLE><TR><TD>系统数据库信息</TD></TR> 
<TR><TD> 
<%while(rs.next()) { 
        %> 
        <%=rs.getString(1)%> 
                <%} 
rs.close();%> 
</TR></TD> 
<TABLE><TR><TD>系统字段信息</TD></TR> 
<TR><TD> 
<%String sql2="select * from pg_type"; 
 rs=stmt.executeQuery(sql2); 
while(rs.next()) { 
        %> 
        (<%=rs.getString(1)%>) 
                <%} 
rs.close(); 
db.close();%> 
</TR></TD> 
</BODY> 
</HTML>
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 好学生九宫格怎么办 考试时有不会题怎么办 孩子是个滚刀肉怎么办 初中审题不认真怎么办 孩子出错率高怎么办 一年级小孩不认真怎么办 旅游时孩子走失怎么办 小孩抄作业怎么办啊 鼻塞流涕老不好怎么办 二年级学生贪玩怎么办 一年级孩子做题不认真怎么办 纹身之后喝酒啦怎么办 股票爆仓散户怎么办 小学一年级孩子马虎怎么办 一年级孩子考试马虎怎么办 数学题会还做错怎么办 小孩学习不认真怎么办 又呆又笨怎么办 孩子做数学题马虎怎么办 起泛怎么办小偏方 儿童过敏起疙瘩怎么办 小孩身上起范怎么办 小孩数学很粗心怎么办 小孩数学考试粗心怎么办 孩子太粗心了怎么办 害怕和别人交流怎么办 三岁宝宝挑食怎么办 眼睛有吃马虎怎么办 一年级的孩子粗心怎么办 做考卷很粗心怎么办 孩子叛逆不听他怎么办 学生上课爱动怎么办 孩子不粗心仔细怎么办 脚痒的无法无天怎么办 站的太久脚肿了怎么办 孩子做题粗心大意怎么办 孩子做作业粗心大意怎么办 初中生没有学习兴趣怎么办 孩子没有学习兴趣怎么办 小孩没有学习兴趣怎么办 小孩左手关节肿痛怎么办