`
zhiyongliu
  • 浏览: 126279 次
  • 性别: 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  
 

相关推荐

    Java各数据库连接池配置介绍

    Java数据库连接池是管理数据库连接的一种机制,它可以有效地复用数据库连接,避免每次数据库操作时创建和销毁连接的开销,从而提高了应用的性能。在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 *...

    Java数据库连接池的原理与应用.pdf

    Java数据库连接池的原理与应用 在Java开发领域,数据库连接池(Database Connection Pool,简称DBCP)是一种提高数据库访问性能、降低资源消耗的重要技术。它通过预先建立一定数量的数据库连接,存储在一个“池”中...

    tomcat数据库连接池的使用

    在Java开发中,Tomcat作为一款广泛使用的应用服务器,提供了对数据库连接池的支持,使得应用程序可以高效、便捷地管理数据库连接。本文将详细介绍如何在Tomcat中配置和使用数据库连接池,以及相关的知识点。 首先,...

    关于DBCP数据库连接池配置整理宣贯.pdf

    DBCP(DataBase Connection Pool)是Apache组织提供的一款Java数据库连接池组件,它是Tomcat服务器默认使用的连接池组件。数据库连接池技术的主要目的是提高系统性能,减少数据库操作中的资源开销,通过预先创建并...

    day18 17.c3p0连接池使用

    在本教程中,我们将深入探讨“day18 17.c3p0连接池使用”的相关知识点,包括C3P0的基本概念、配置、优势以及如何在实际项目中应用。 首先,理解C3P0的核心功能。C3P0连接池的主要任务是管理和复用数据库连接,避免...

    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\

    c3po连接池参数配置

    ### c3p0连接池参数配置详解 #### 一、引言 在数据库连接管理中,连接池技术是一项重要的优化手段。它通过预创建并维护一定数量的数据库连接,来提高应用程序对数据库访问的效率与性能。c3p0作为一款成熟的开源...

    三大连接池参数说明(DBCP\C3P0\Proxool)

    【三大连接池参数详解】 Apache-DBCP 是一个流行的开源数据库连接池,它提供了一种高效、灵活的方式来管理数据库连接。下面将详细解释其主要参数: 1. dataSource:指定要连接的数据源,通常不在服务器配置文件...

    基于Java的JDBC连接池设计源码

    该项目为基于Java语言的JDBC连接池设计,源代码共计75个文件,涵盖38个Java源文件、17个配置文件(包括properties和col格式)、4个Markdown文件、2个文本文件、2个JDBC驱动文件、2个JAR包文件以及若干其他辅助文件。

    MysqlConnectionPoolCompare--dotNET5.zip

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

    F17锂电池自动碰焊设备SW2012.rar

    碰焊是一种在电池制造过程中常用的连接技术,用于将电芯的正负极片与其他部件如引脚、汇流条等焊接在一起。在锂电池生产中,自动碰焊设备提高了生产效率,减少了人工操作的误差,确保了产品的质量和一致性。 描述中...

    bonecp详细配置

    BoneCP(Bone Connection Pool)是一个高效、开源的Java数据库连接池实现,它在处理高并发连接请求方面表现出色。本文将详细介绍BoneCP的主要配置参数及其默认值,帮助开发者更好地理解和使用该连接池。 #### 1. `...

    C0P3配置文档 详解.docx

    接池时,C3P0 是一款轻量级的数据库连接池实现,它提供了一种高效、稳定的方式来管理数据库连接。C3P0 通过控制连接的创建、分配和回收,提高了应用程序处理数据库请求的效率,同时减少了数据库系统的资源消耗。 在...

    c3p0详细配置

    17. **minPoolSize**: 连接池中的最小连接数。即使在空闲状态下,连接池也会至少保留这个数量的连接。 18. **testConnectionOnCheckin**: 如果设置为 true,在每次连接返回到连接池时进行测试。默认为 false。 19....

    达梦数据库驱动Dm7JdbcDriver17

    达梦数据库驱动Dm7JdbcDriver17还支持连接池管理,如使用C3P0、Apache DBCP或HikariCP等,以提高应用程序性能和资源利用率。此外,它还提供了事务管理、异常处理、元数据查询等功能,满足复杂的企业级应用需求。 在...

    C3P0详细配置C3P0详细配置.docC3P0详细配置.docC3P0详细配置.doc

    C3P0是一款开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,C3P0可以帮助管理和优化数据库连接,提高应用程序的性能和效率。以下是对C3P0配置中各个属性的详细解释...

    Mackey Glass.zip_MackeyGlass_t17.txt_Mackey–Glass_储备池_储备池预测_混沌序列

    输入层将时间序列转化为网络状态,隐藏层通过随机连接形成“echo state”,而输出层通过训练获得,用于预测未来的序列值。 在处理混沌序列时,储备池预测的优势在于其对初始条件的不敏感性以及训练过程的高效性。...

Global site tag (gtag.js) - Google Analytics