`
guohf
  • 浏览: 418039 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java数据库连接池介绍与例子

阅读更多

一、连接池原理及介绍:
    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
    数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连 接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连 接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:1.最小连接数是连接池一直保持的数据库连 接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。2.最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过 此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。3.如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之 后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复 使用或是空闲超时后被释放。

二、Java中开源的数据库连接池:
    1.Proxool 这是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。
  2.C3P0 是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。  
  3.Jakarta DBCP 是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用。
    在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有 BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。至于c3p0,有评论说它的算法不是最优的,c3p0占用资源比较大,效率也 不高。proxool不少行家推荐使用,是负面评价是最少的一个。从性能和出错率来说,proxool稍微比前两种好些。

三、Proxool和C3P0例子(以sqlserver2000数据库为例)
   
    1.Proxool例子
      Proxool下载地址:http://sourceforge.net/projects/proxool/files/proxool/
      必须加入的包:commons-logging  下载地址:http://commons.apache.org/logging/
     
1).Proxool.properties配置:
         jdbc-0.proxool.alias=sqlserver
         jdbc-0.proxool.driver-class=com.microsoft.jdbc.sqlserver.SQLServerDriver
         jdbc-0.proxool.driver-url=jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=Northwind
         jdbc-0.user=sa
         jdbc-0.password=sa
         jdbc-0.proxool.maximum-connection-count=20
         jdbc-0.proxool.prototype-count=4
         jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
         jdbc-0.proxool.verbose=true
         jdbc-0.proxool.statistics=10s,1m,1d
         jdbc-0.proxool.statistics-log-level=ERROR

         属性说明:
         maximum-connection-count: 最大的数据库连数.
         maximum-connection-lifetime: 连接最大生命时间 默认4小时
         minimum-connection-count: 最小的数据库连接数
         prototype-count: 连接池中可用的连接数量.如果当前的连接池中的连接少于这个数值.新的连接将被建立(假设没有超过最大可用数)
         simultaneous-build-throttle:  同时最大连接数
         statistics:  连接池使用状况统计。 参数“10s,1m,1d”
         statistics-log-level:  日志统计跟踪类型。 参数“ERROR”或 “INFO”
         verbose: 详细信息设置。 参数 boolean 值
     
2).例子:

public class Test {
public static void main(String[] args) {
Connection conn=null;
try {
            PropertyConfigurator.configure("Proxool.properties");
               conn = DriverManager.getConnection("proxool.sqlserver");
                    if(conn!=null)
                       System.out.println("数据连接测试成功!");
                    Statement Stmt=conn.createStatement();
                    ResultSet Rst=null;
                    Rst=Stmt.executeQuery("select * from orders");
                    while(Rst.next()) 
                    System.out.println(Rst.getString(1));
}catch(SQLException e) {
                   System.out.println("error"+e);
                }catch(ProxoolException e1){
                   System.out.println(e1);
                }finally{
                   try{
                     if (conn != null)
                       conn.close();
                   }catch(SQLException e2){
                       System.out.println(e2);
                   }              
                }
     }
}

    2.C3P0例子
     c3po 下载地址:http://sourceforge.net/projects/c3p0/
     必须加入的包:log4j 下载地址:http://jakarta.apache.org/log4j
    
1).特别注意:
c3p0用微软提供的数据库驱动连接sqlserver2000时(sqlserver其他版本未测试)后台会报错,但是不影响使用,这是由于微软提供的驱动与c3p0有兼容问题(主要是c3p0日志级别问题),使用第 

三方的驱动JTDS就不会有任何问题。
JTDS 下载地址 :http://sourceforge.net/projects/jtds/files/
    
2).例子:

public class Test {
public static void main(String[] args) {
     try {
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass("net.sourceforge.jtds.jdbc.Driver");
cpds.setJdbcUrl("jdbc:jtds:sqlserver://localhost:1433;DatabaseName=Northwind");
cpds.setUser("sa");
cpds.setPassword("sa");
cpds.setInitialPoolSize(2);
cpds.setMaxPoolSize(10);
cpds.setAutoCommitOnClose(true);
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
con = cpds.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery("select * from orders");
while (rs.next()) {
  System.out.println(rs.getString(1));
}

     } catch (Exception e) {
      e.printStackTrace();
     }
   }
}

分享到:
评论

相关推荐

    java数据库连接池.rar

    总的来说,Java数据库连接池如C3P0和Druid,以及Spring的JdbcTemplate,都是为了优化数据库操作而设计的工具。它们各自有其特点和优势,开发者可以根据项目需求选择合适的技术。在使用过程中,充分理解和合理配置...

    java oracle 数据库 连接池 小例子

    数据库连接池在初始化时会创建一定数量的数据库连接,这些连接在应用程序需要时可以被复用,而不是每次请求时都创建新的连接,从而减少了创建和销毁连接的开销。C3P0作为连接池实现之一,提供了很多配置参数,例如...

    java手写数据库连接池

    数据库连接池是Java应用程序中非常重要的一个组件,它在提高应用性能、节省系统资源方面起着关键作用。本文将深入探讨如何使用Java手写数据库连接池,并基于maven进行项目构建。我们将分析四个核心类的功能,以及...

    java数据库连接池源码及使用示例

    总结来说,本资源提供了学习和实践Java数据库连接池的一个起点。通过分析源码并运行示例,你可以深入理解数据库连接池的实现细节,这将对提升Java应用的数据库性能有很大帮助。同时,这也是一次了解和比较不同连接池...

    利用JAVA数据库连接池连接数据库的例子.rar

    总的来说,数据库连接池是Java应用与数据库交互时不可或缺的一部分,它通过高效管理数据库连接,提高了系统性能和稳定性。在实际开发中,根据项目的规模和需求,选择合适的连接池实现,并进行适当的配置优化,是至关...

    poolman 数据库连接池+源码例子,自己写的代码

    数据库连接池在应用启动时会预先初始化一定数量的数据库连接,这些连接在不使用时会被保留在池中,当需要与数据库交互时,应用程序可以从池中获取一个已经建立的连接,使用完毕后归还回池,而不是直接关闭。...

    JAVA数据库连接池proxool

    Java数据库连接池(JDBC Connection Pool)是一种管理数据库连接的技术,它通过预先创建并维护一定数量的数据库连接,为应用程序提供高效、便捷的数据库访问方式。Proxool是Apache Software Foundation开发的一个...

    JSP数据库连接池连接实例

    在IT行业中,数据库连接池是优化应用程序性能的关键技术之一,特别是在使用Java服务器页面(JSP)进行Web开发时。数据库连接池允许程序高效地管理与数据库的连接,减少了创建和销毁连接的开销,提高了系统资源利用率...

    数据库连接池 使用方法

    为了提高应用程序的性能与响应速度,数据库连接池技术被广泛应用。本文将详细探讨数据库连接池的基本概念、原理及其在Java环境中具体的应用实践。 #### 二、数据库连接池基本概念 数据库连接池是一种管理多个...

    poolTest数据库连接池例子

    总结来说,"poolTest"数据库连接池例子是Java开发中的一个实践教程,涵盖了Druid、C3P0和HikariCP三种主流的数据库连接池库的使用方法。了解和掌握这些知识对于优化数据库操作,提升应用程序性能至关重要。通过阅读...

    使用java语言编写的数据库连接池,实现数据库与jsp文件的连接.zip

    这个项目提供了一个基础的Java数据库连接池实现,结合JSP进行数据访问的例子,有助于学习和理解数据库连接池的工作原理,以及如何在实际项目中应用这些技术。通过对上述知识点的掌握,开发者可以构建更高效、更安全...

    ConnectionPool数据库连接池例子.doc

    下面是一个使用Java语言实现的数据库连接池示例,名为ConnectionPool。 ConnectionPool类的成员变量包括: * jdbcDriver:数据库驱动类串 * dbUrl:数据库URL * dbUsername:连接数据库用户名 * dbPassword:连接...

    Java连接数据库的几个小例子与总结

    在实际项目中,我们通常会使用连接池来管理数据库连接,例如Apache的DBCP或C3P0,以提高性能和效率。连接池预先创建并缓存一定数量的数据库连接,避免了频繁创建和关闭连接的开销。 8. **JDBC事务管理** JDBC支持...

    Oracle+数据库例子(数据库连接池+中文乱码+留言板+过滤器)

    本资源包提供了一系列的实例,旨在帮助学习者掌握Oracle数据库与Java Web开发中的关键概念,包括数据库连接池、中文乱码处理、留言板功能以及过滤器技术。 首先,我们来看"数据库连接池"。数据库连接池是一种管理...

    一个连接多种数据库的连接池封装包

    数据库连接池是数据库管理中的重要组成部分,它优化了数据库资源的使用,提高了系统性能。本文将详细介绍一个连接多种数据库的连接池封装包,包括其功能、实现方式以及如何使用。 标题中的“一个连接多种数据库的...

    数据库连接池eclipse+MySQL

    数据库连接池是现代Java应用程序中管理数据库连接的关键技术,它能显著提高应用性能并优化资源利用率。在本示例中,我们将关注如何在Eclipse集成开发环境中配置和使用数据库连接池来连接MySQL数据库,主要涉及JDBC...

    java数据库连接池和数据库连接示例

    Java数据库连接池(Database Connection Pool)是Java应用程序中用于管理数据库连接的一种技术。它通过预先创建并维护一定数量的数据库连接,为多个并发的应用程序提供共享的数据库连接资源,从而提高系统的性能和...

    一个Demo小例子让你了解数据库连接池实现的4种方式

    本文将通过一个Demo小例子详细介绍四种常见的数据库连接池实现方式:C3P0、DBCP、HikariCP以及Druid。 首先,让我们了解数据库连接池的基本原理。数据库连接池在初始化时会创建一定数量的数据库连接,这些连接在...

    prxool数据库连接池实例( 带监控功能数据库连接池 )

    通过JMX,开发者可以监控和管理运行在Java虚拟机上的各种资源,包括PRXool数据库连接池。通过MBean(Managed Beans),PRXool暴露了其内部状态,用户可以通过JConsole或者其他管理工具进行查看和操作。 在使用...

Global site tag (gtag.js) - Google Analytics