• 连接池的使用(一)


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

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

    接是不合理的; 连接池的思想是: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>
  • 相关阅读:
    js 判断图片是否加载完成
    js检测密码强度
    javascript 的MD5代码备份,跟java互通
    JavaScript实现限时抢购实例
    JS日期比较大小 给定时间和持续时间计算最终时间
    jquery与json的结合
    div内容过长自动省略号
    高并发大流量专题---11、Web服务器的负载均衡
    如何利用nginx实现负载均衡(总结)
    高并发大流量专题---10、MySQL数据库层的优化
  • 原文地址:https://www.cnblogs.com/ylgl/p/3815065.html
Copyright © 2020-2023  润新知