连接池的使用(一)
数据库操作中,和数据库建立连接是最为耗时的操作之一,而且数据库都有最大连接数目的限制
,如果很多用户访问的是同一数据库,所进行的都是同样的操作,那么为每个用户都建立一个连
接是不合理的; 连接池的思想是: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>
做时间的主人,命运的主宰,灵魂的舵手。