首页 > 代码库 > 连接池的使用(一)

连接池的使用(一)

数据库操作中,和数据库建立连接是最为耗时的操作之一,而且数据库都有最大连接数目的限制

,如果很多用户访问的是同一数据库,所进行的都是同样的操作,那么为每个用户都建立一个连

接是不合理的; 连接池的思想是:Tomcat服务器可以预备好若干个连接对象,将这些对象存放在一个称为连接池

的容器中(通常由链表来担任这一角色),当某用户需要操作数据库时,只要从连接池中取出一

个连接对象,当用户使用完该连接对象后,将该连接对象放回到连接池中。如果连接池中没有连

接对象可以用,那么该用户就必须等待。 如下例子是使用scope=application的bean(由ApplicationCon类负责创建)。该bean创建时就

建立若干连接对象,并将它们存放在一个LinkedList对象(连接池)中。因此,所有用户将共享

LinkedList对象中的连接对象。

一、ApplicationCon

 1 package database.operation; 2 import java.sql.*; 3 import java.util.LinkedList;  4 public class ApplicationCon { 5      6     LinkedList<Connection> list;//存放Connection对象的链表 7     public ApplicationCon() 8     { 9         try10         {11             Class.forName("com.mysql.dbc.Driver");12         }catch(Exception e)13         {14             15         }16         list=new LinkedList<Connection>();17         //创建十个连接18         for(int k=1;k<=10;k++)19         {20             try{21                 String uri="jdbc:mysql://localhost/factory";22                 Connection conn=DriverManager.getConnection(uri,"root","003222");23                 list.add(conn);24             }25             catch(SQLException e)26             {}27         }28     }29     public synchronized Connection getOneConnection()30     {31         if(list.size()>0)32         {33             return list.removeFirst();//链表删除第一个结点,并返回该结点的连接对象34             35         }36         else37             return null;38     }39     public synchronized void putBackOneConnection(Connection conn)40     {41         list.addFirst(conn);42     }43 }

二、UseConnBean

 1 package database.operation; 2 import java.sql.*; 3  4  5 public class UseConnBean { 6     String tableName=""; 7     StringBuffer queryResult;//查询结果 8     Connection conn; 9     public UseConnBean()10     {11         queryResult=new StringBuffer();12     }13     public void setTableName(String s)14     {15         tableName=s.trim();16         queryResult=new StringBuffer();17     }18     public String getTableName()19     {20         return tableName;21     }22     public void setConnection(Connection con)23     {24         this.conn=con;25     }26     public StringBuffer getQueryResult()27     {28         Statement sql;29         ResultSet rs;30         try{31             queryResult.append("<table border=1>");32             DatabaseMetaData metadata=http://www.mamicode.com/conn.getMetaData();33             ResultSet rs1=metadata.getColumns(null, null, tableName, null);34             int filedCount=0;35             queryResult.append("<tr>");36             while(rs1.next())37             {38                 filedCount++;39                 String clumnName=rs1.getString(4);40                 queryResult.append("<td>"+clumnName+"</td>");41             }42             queryResult.append("</tr>");43             sql=conn.createStatement();44             rs=sql.executeQuery("select * from "+tableName);45             while(rs.next())46             {47                 queryResult.append("<tr>");48                 for(int k=1;k<=filedCount;k++)49                 {50                     queryResult.append("<td>"+rs.getString(k)+"</td>");51                 }52                 queryResult.append("</tr>");53             }54             queryResult.append("</table>");        55         }56         catch(SQLException e)57         {58             queryResult.append("请输入正确的表名"+e);59         }60         return queryResult;61     }62 }

三、JSP页面代码

 1 <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 <%@ page contentType="text/html; charset=GBK" %> 7 <%@ page import="database.operation.*" %> 8 <%@ page import="java.sql.*" %> 9 <jsp:useBean id="connSet" class="database.operation.ApplicationCon" scope="application"/>10 <jsp:useBean id="inquire" class="database.operation.UseConnBean" scope="request" />11 <% Connection connection=connSet.getOneConnection();12     inquire.setConnection(connection);13  %>14  <jsp:setProperty name="inquire" property="tableName" param="tableName"/>15 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">16 <html>17   <head>18     <base href=http://www.mamicode.com/"<%=basePath%>">19     20     <title>My JSP lianjiechi.jsp starting page</title>21     22     <meta http-equiv="pragma" content="no-cache">23     <meta http-equiv="cache-control" content="no-cache">24     <meta http-equiv="expires" content="0">    25     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">26     <meta http-equiv="description" content="This is my page">27     <!--28     <link rel="stylesheet" type="text/css" href=http://www.mamicode.com/"styles.css">29     -->30 31   </head>32   33   <body>34     你连接的数据库是factory35     <form action="" method="post">36     输入表的名字:<input type=text name="tableName" size=10>37     <input type=submit name="g" value=http://www.mamicode.com/"提交">38     39     </form>40     在<jsp:getProperty name="inquire" property="tableName"/>表查询到的记录;41     <BR><jsp:getProperty name="inquire" property="queryResult"/>42     <% 43     connSet.putBackOneConnection(connection);44      %>45     46   </body>47 </html>