`
zhiyongliu
  • 浏览: 123677 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

17 连接池

 
阅读更多

数据库连接的建立和关闭是非常耗费系统资源的操作。数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态的对池中的连接进行申请、使用和释放。对于多余连接池中的连接数的请求,应在请求队列中排队等待。并且应用程序会根据连接的使用率动态的增加和减少池中的连接数。
连接池技术尽可能多的重用了消耗内存的资源,大大节省了内存,提高了服务器的效率。
不同的版本的tomcat创建连接池的方法是不同的。下面基于tomcat6.0 + MS sql server 2005来说明。
step1:数据库驱动jdbc4放到$tomcat$/common/lib中。下载地址http://dl.iteye.com/topics/download/cf3a7418-e9c1-3fe5-9cc6-ef46a9397ece
step2:打开$tomcat$/conf/server.xml,在host下加入如下代码

<Context path="" docBase="D:\myelipseJsp\dsideal\WebRoot" reloadable="true">
 <Resource 
      name="jdbc/xxx" 
      type="javax.sql.DataSource"
      username="sa"
      password="sa" 
      driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
      url="jdbc:sqlserver://localhost:1433;DatabaseName=database" 
      maxActive="300" 
      maxIdle="100" 
      maxWait="5000"
      removeAbandoned="true"
      removeAbandonedTimeout="600"   
      logAbandoned="true" 
	auth="Container"
        />
</Context>

 

maxActive是最大激活连接数,这里取值为300,表示同时最多有300个数据库连接。
maxIdle是最大的空闲连接数,这里取值为100,表示即使没有数据库连接时依然可以保持100空闲的连接,而不被清除,随时处于待命状态。
MaxWait是最大等待秒钟数,这里取值5000,表示5秒后超时,也可取值-1,表示无限等待,直到超时为止。
removeAbandoned="true"
removeAbandonedTimeout="100"
logAbandoned="true"
以上三句话也需要加入,其主要作用在于当并发用户超过预定的连接后会有一些连接因为等待而失效,要及时回收这些无效链接。100表示100秒。

在connpool.jsp中使用。

<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<%@ page import="javax.naming.Context"%> 
<%@ page import="javax.sql.DataSource"%> 
<%@ page import="javax.naming.InitialContext"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/xxx");
Connection conn = ds.getConnection();
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from news"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> <br>
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close();   
%> 

 

注意两段代码中的jdbc/xxx为连接池的名字,要保持一致。

当然我们也可以将连接封装起来,作为一个类使用。结合我们以前所讲的dataconn.java,这里我将它们合并为一个类。代码如下:

package dataconn;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
public class  dataconn{
 ResultSet rs = null;
 Connection conn=null;
 Statement stmt=null;
 //连接池
 public  static  synchronized Connection getConnection() throws Exception
 {
  try
  {
   
   Context initCtx = new javax.naming.InitialContext(); 
            Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
            DataSource ds = (DataSource)envCtx.lookup("jdbc/xxx"); ;
   return ds.getConnection();
  }
  catch(SQLException e)
  {
   throw e;
  }
  catch(NamingException e)
  {
       throw e;
  }
  
 }
 //更新数据
 public void executeUpdate(String sql) {
  try {
   conn = getConnection();
   }
  catch (Exception ex) {
                           ex.printStackTrace();
                   }
  try {
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
   stmt.executeUpdate(sql);
   } 
  catch(SQLException ex) { 
   System.err.println("aq.executeUpdate: " + ex.getMessage());
   System.err.println("aq.executeUpadatestrSQL: " + sql);
   }
  }
  
 //查询数据
 public ResultSet executeQuery(String sql) {
   rs = null;
   try {
   conn = getConnection();
   }
  catch (Exception ex) {
                           ex.printStackTrace();
                   }
   try {
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    rs = stmt.executeQuery(sql);
    } 
   catch(SQLException ex) { 
    System.err.println("aq.executeQuery: " + ex.getMessage());
    System.err.println("aq.executeQuerystrSQL: " + sql);
   }
   return rs;
  }  
  
 public void closeStmt()
  {
   try{
    if(stmt!=null){
     stmt.close();
    }
      }
   catch(SQLException e){
    e.printStackTrace();
      }
  }


 public void closeConn()
 {
  try{
   if (conn!=null){
    conn.close();
   }
     }
  catch(SQLException e){
   e.printStackTrace();
     }
 }
}


 

 

 

分享到:
评论
2 楼 zhongft496 2015-12-30  
为什么不能用
1 楼 chunliutang 2015-12-07  
 

相关推荐

    tomcat数据库连接池的使用

    tomcat数据库连接池的使用

    2021年11月17日连接mysql8.0.16最新数据库连接池jar包.zip

    mchange-commons-java-0.2.19.jar\c3p0-0.9.5.5.jar\commons-dbcp2-2.9.0.jar\commons-logging-1.2.jar\commons-pool2-2.11.1.jar\

    c3p0连接池

    C3P0连接池,最常用的连接池技术!

    day18 17.c3p0连接池使用

    NULL 博文链接:https://364232252.iteye.com/blog/2368501

    完整版Java web开发教程PPT课件 Java开发进阶教程 第20章 数据库连接池,缓存(共15页).pptx

    完整版Java web开发教程PPT课件 Java开发进阶教程 第20章 数据库连接池,缓存(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第22章 常用框架的介绍以及环境搭建(共16页).pptx JS课程案例...

    MysqlConnectionPoolCompare--dotNET5.zip

    基于 .NET 5环境。 用到的技术点:IoC(autofac)、Dapper、Mysql。 --- 在代码Program.cs的L17~L21中,填写自己的数据库链接(先在数据库建立对应的表,插入数据,执行single_table.sql此文件即可。...

    Hibernate配置数据连接

    配置Hibernate使用c3p0或Proxool连接池(2008-01-13 17:15:54)转载标签: 杂谈 1.Hibernate默认连接池 &lt;?xml version='1.0' encoding='UTF-8'?&gt; &lt;!DOCTYPE hibernate-configuration PUBLIC "-//...

    druid-1.1.17.jar

    2019年3月最新发布,阿里druid-1.1.17连接池jar包,大项目亲测可用,放心下载使用

    hulk, HULK工具移植到了一些附加功能上.zip

    hulk, HULK工具移植到了一些附加功能上 Hulk工具HULK工具从 python 移植到... 我刚刚在Barry上发布了原始的python 工具 2012/05/17/hulk-web-server-dos-tool/我刚刚把代码移植为快速和。 原始函数名保持不变,原始逻辑

    Java高校学生考勤管理系统设计与实现毕业论文

    6.2.1数据库连接池程序编码 38 6.2.2 连接池配置文件 41 第7章 软件测试 43 7.1 引言 43 7.2 测试方案 43 7.2.1 黑盒测试 43 7.2.2 白盒测试 43 7.2.3 其它测试方案 43 7.2.4 本系统所采用测试方案 43 7.3 测试过程 ...

    锂离子电池锂电工艺大全锂电池生产工艺技术资料30个合集.zip

    17--锂离子电池工艺流程介绍(ATL教材).pdf 18--圆柱18650锂电芯的制造工艺简单介绍.pdf 19--锂电池企业做好质量管控的七大关键步骤.pdf 2---锂离子电池电解液的基础.pdf 20--必须收藏的100个知识点,涉及电池的...

    javaweb详细笔记,绝对详细(内含代码)

    JDBC & 配置文件 & 连接池 19 Xml文档及解析 31 反射 33 Http协议和Tomcat服务器 36 JavaWeb核心之Servlet 41 HttpServletResponse 46 HttpServletRequest 51 会话技术Cookie&Session; 55 动态页面技术(JSP/EL/JSTL...

    springboot集成activiti5.22

    1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2. 部门管理:配置系统组织机构(公司、部门...16. 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 17.集成activiti5.22

    springboot+Activiti .zip

    1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2. 部门管理:配置系统组织机构(公司、部门、... 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 17.集成activiti5.22

    Activiti工作流学习资料.zip

    Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数。 定义数据库配置参数: jdbcUrl: 数据库的JDBC URL。 jdbcDriver: 对应不同数据库类型的驱动。 jdbcUsername: 连接数据库的用户名...

    service mesh 学习实践笔记.zip

    07 | 连接池:阻塞式连接池和多路复用连接池的差异 08 | 微服务网关(Kong):网关在微服务架构中的作用 09 | 配置中心:如何在微服务治理中发挥更大的作用? 10 | 可观测性之 Trace:更快速定位问题 11 | 可观测性...

    开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单

    开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单。基于RuoYi-VUE版本开发。 1、使用RuoYi-Vue的基础上开发。 2、集成flowable,并与系统用户角色进行绑定,可非常方便的设置任务的办理人...18.连接池监视

    ESFramwork2.0

    - Tcp连接池管理器 &lt;br&gt;4.ESFramework介绍之(12)―― 基于Tcp连接池的消息处理器 &lt;br&gt;5.ESFramework介绍之(13)-- 功能插件处理器工厂 &lt;br&gt;6.ESFramework介绍之(14)-- AS与FS通信方案 &lt;br&gt;7...

    nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例

    这个封装只是sql语句查询,看懂这个,其他的可以自行扩展,支持连接池. 一 安装mssql模块 npm install mssql 二 封装连接数据库代码 db.js: /*2016年7月14日17:02:15 QQ: 452076103 意外金喜 mssql模块简单封装 *...

Global site tag (gtag.js) - Google Analytics