连接池的使用(一)

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

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

接是不合理的; 连接池的思想是: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         try
10         {
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         else
37             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=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="<%=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="styles.css">
29     -->
30 
31   </head>
32   
33   <body>
34     你连接的数据库是factory
35     <form action="" method="post">
36     输入表的名字:<input type=text name="tableName" size=10>
37     <input type=submit name="g" value="提交">
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>

 

posted @ 2014-06-29 14:29  幽林孤狼  阅读(1418)  评论(0编辑  收藏  举报