数据库连接池概念、种类、配置(DBCP\C3P0\JndI与Tomact配置连接池)

一、DBCP 连接:
DBCP 连接池是 Apache 软件基金组织下的一个开源连接池实现。

需要的 java 包
commons - dbcp - 1.2.1.jar //连接池的实现
commons - pool - 1.2.jar //连接池实现的依赖库
commons - collection.jar //连接池实现的依赖库

主要代码:
import org.apache.commons.dbcp.BasicDataSource;

// 数据库池

private static BasicDataSource dataSource = new BasicDataSource();

public static Connection getConn(){
Connection con = null ;
try {
   datasource.setDriverClassName("com.mysql.jdbc.Driver");
   datasource.setUrl("jdbc:mysql://localhost/mysql");
   datasource.setUsername("root");
   datasource.setPassword("root");
   datasource.setMaxActive(10);
   datasource.setMaxIdle(5);
   datasource.setMaxWait(0);
   con = datasource.getConnection();
  
} catch (Exception e) {
   // TODO: handl exception
   e.printStackTrace();
}
return con ;
}

二、C3PO 连接:
C3PO 连接池是一个优秀的连接池,推荐使用。

需要的 java 包
c3po0.902.jar

主要代码:
import com.mchange.v2.c3p0.ComboPooledDataSource;

// 数据库池

private static ComboPooledDataSource dataSource = new ComboPooledDataSource();

public static Connection getConn(){
Connection con = null ;
try {
   datasource.setDriverClass("com.mysql.jdbc.Driver");
   datasource.setJdbcUrl("jdbc:mysql://localhost/mysql");
   datasource.setUser("root");
   datasource.setPassword("root");
   datasource.setMaxActive(10);
   datasource.setMaxIdle(5);
   datasource.setMaxWait(0);
   con = datasource.getConnection();
  
} catch (Exception e) {
   // TODO: handl exception
   e.printStackTrace();
}
return con ;
}

三、JndI与 Tomact 连接池
此连接池不需要其他的 java 包

1、在 Tomact 的 conf 文件下的 context.xml 中加上如下:

<Resource name="jdbc/mysql"
    auth="Container"
    type="javax.sql.DataSource"
                  maxActive="100"
    maxIdle="30"
    maxWait="10000"
                  username="root"
    password="root"
    driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://localhost:3306/test?autoReconnect=true"/>

说明:
type: 指数据源类型;
name: 为这个Resource 的名字 "jdbc/mysql" 它与 下一步 在 web.xml 的文件中;
   <res-ref-name>jdbc/mysql</res-ref-name>
********************** 中的 “ jdbc/mysql ” 名字可以任意取   但用到这个名字时,
********************** 一定要一样,有三个地方要用 :context.xml, web.xml, java 程序中的类中,
   和 index.jsp
   <sql:query var="rs" dataSource="jdbc/mysql">
    select bid, bname from books
    </sql:query>
   出现。

maxActive: 表示 dbcp 的最大连接数目,0 为不受限制;
maxIdle: 表示 dbcp 空闲时的数据库连接的最大数目;
maxWait: 表示 dbcp 中的数据库接处于空闲状态的最长时间,0 为不受制。
username: 数据库用户名;
password: 数据库登录密码;
driverClassName: 指数据库的 jdbc 驱动程序
url :中有个 test 它是 mysql 中的一个数据库的名字

2、web.xml configuration

<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/mysql</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

3、测试:
在 mysql 数据库中有个 test 数据库
test 中有表如下
         create table books(bid int , bname varchar(20))

html 测试:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
         <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

<body>
    This is my JSP page. this is test JNDI datasource<br>
   <sql:query var="rs" dataSource="jdbc/mysql">
   select bid, bname from books
   </sql:query>

<c:forEach var="row" items="${rs.rows}">
   bid:${row.bid}<br>
       bname:${row.bname}
    </c:forEach>
   
</body>

java 程序测试:
     // 无需导入外部包
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public Connection getConn() {
Connection conn = null ;
try {
   InitialContext ctx = new InitialContext();
  
   DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
  
    conn = dataSource.getConnection();
   String sql = "select * from books" ;
   PreparedStatement ps = conn.prepareStatement(sql);
   ResultSet rs = ps.executeQuery();
   while(rs.next()){
    System.out.println (rs.getInt(1));
   }
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  
} catch (NamingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}
return conn;
}

---------- 说明:这里的 java:comp/env 是前缀,java 语言规范,后面是你在 web.xml 中
     <res-ref-name>jdbc/mysql</res-ref-name> 的名字,
   这个java 程序 不能直接测试, 因为 context.xml、 web.xml 都是Tomcat 中的,
   服务没开,无法读取 文件信息。
用时:可以直接将 context.xml 放到工程的 META-INF\ 目录下。

转!数据库连接池概念、种类、配置(DBCP\C3P0\JndI与Tomact配置连接池)的更多相关文章

  1. DBCP,C3P0与Tomcat jdbc pool 连接池的比较

    hibernate开发组推荐使用c3p0; spring开发组推荐使用dbcp(dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect,告诉连接被重置 ...

  2. 001-http-总览、文件配置、常用http client、http连接池

    一.概述 http请求项目搭建:地址:https://github.com/bjlhx15/common-study.git 中的common-http 主要针对post请求中的,form表单[app ...

  3. 总结spring下配置dbcp,c3p0,proxool数据源链接池

    转载自 http://hiok.blog.sohu.com/66253191.html applicationContext-datasource-jdbc.xml <?xml version= ...

  4. 开源DBCP、C3P0、Proxool 、 BoneCP连接池的比较

    简介 项目主页 使用评价  DBCP DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用 http://homepages.nild ...

  5. spring下配置dbcp,c3p0,proxool[转]

    不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的.在以往的应用中,数据源一般是Web应用服务器提供的.在Spring中,你不但可以通过JNDI获取应用 ...

  6. Hibernate -- 配置c3p0连接池, 事务隔离级别, 管理session

    知识点1:配置c3p0连接池(了解) * 引入c3p0-0.9.1.jar * 在hibernate.cfg.xml文件中增加如下配置 <!-- C3P0连接池设定--> <!-- ...

  7. hibernate+mysql的连接池配置

    1:连接池的必知概念    首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...

  8. Hibernate_14_数据连接池的使用

    在主配置文件Hibernate.cfg.xml中设置: <!-- 设置默认的事务隔离级别: 隔离级别 相应的整数表示 READ UNCOMMITED 1 READ COMMITED 2 REPE ...

  9. DBCP连接池原理分析及配置用法

    DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...

随机推荐

  1. Unity脚本在层级面板中的执行顺序测试4-附加整理

    测试4为一些附加内容,后续的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html ...

  2. 为Apache配置虚拟机Virtual Host

    配置虚拟机最少需要修改两个文件,即httpd-vhosts.conf 和 hosts (记住修改任何配置前先备份哦,这才是个好习惯) 第一步,修改httpd-vhosts.conf文件, 文件路径 \ ...

  3. thinkphp 实现无限极分类

    thinkphp实现无限极分类,获得所有的子类 今天学习测试了一上午也没有整出来,一开始一直没有办法把所有的子分类拿出来. 最后找到原因: 每次调用的时候没有在最后return的位置我没有选择retu ...

  4. uml中定义的关系详细详解

    uml定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.下面对其定义和表示方法逐一说明. 依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依 ...

  5. [转]人人网首页拖拽上传详解(HTML5 Drag&Drop、FileReader API、formdata)

    人人网首页拖拽上传详解(HTML5 Drag&Drop.FileReader API.formdata) 2011年12月11日 | 彬Go 上一篇:给力的 Google HTML5 训练营( ...

  6. C#窗体四边框阴影效果的实现

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. c++学习总结--复合类型,const。

    复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复 ...

  8. VC 实现文件与应用程序关联(转载)

    转载:http://www.cnblogs.com/RascallySnake/archive/2013/03/01/2939102.html 日常工作中,doc文件直接双击后,就能启动word软件, ...

  9. 【leetcode❤python】 38. Count and Say

    #-*- coding: UTF-8 -*- class Solution(object):    def countAndSay(self, n):        """ ...

  10. [SAP ABAP开发技术总结]预定义(内置)数据类型

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...