zoukankan      html  css  js  c++  java
  • 连接池的使用(一)

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

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

    接是不合理的; 连接池的思想是: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>
  • 相关阅读:
    Codeforces 1291 Round #616 (Div. 2) B
    总结
    刷新DNS解析缓存+追踪+域名解析命令
    数学--数论--Hdu 5793 A Boring Question (打表+逆元)
    Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析
    LeetCode 117 Populating Next Right Pointers in Each Node II
    LeetCode 116 Populating Next Right Pointers in Each Node
    test test
    LeetCode 115 Distinct Subsequences
    LeetCode 114. Flatten Binary Tree to Linked List
  • 原文地址:https://www.cnblogs.com/ylgl/p/3815065.html
Copyright © 2011-2022 走看看