学习JDBC连接池

目录

一、JDBC与连接池的概念

二、数据库连接池

连接池的使用步骤​编辑 

三、使用连接池的优点

四、Java中开源的数据库连接池

五、实例


一、JDBC与连接池的概念

JDBC全程为Java DataBase Connection,它是JDK提供用于操作数据库的接口,换句话说,它是JDK为Java操作数据库提供的API规范。具体的数据库驱动、API的实现类是由数据库厂商实现。例如使用MySQL需要mysql-connector-java-5.1.39-bin.jar。

连接池:用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。

二、数据库连接池

为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。

  1. 数据库连接池的基本思想:
    数据库连接池就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。

    数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

  2. 连接池的使用步骤 

三、使用连接池的优点

  1. 资源重用:由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。
  2. 更快的系统反应速度:数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间
  3. 新的资源分配手段对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置实现某一应用最大可用数据库连接数的限制避免某一应用独占所有的数据库资源
  4. 统一的连接管理,避免数据库连接泄露在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露

四、Java中开源的数据库连接池

  1. C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate  一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。

  2. Proxool:是一个Java SQL Driver驱动程序,提供了对选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中,完全可配置,快速、成熟、健壮。可以透明地为现存的JDBC驱动程序增加连接池功能。

  3. Jakarta DBCP:DBCP是一个依赖Jakarta  commons-pool对象池机制的数据库连接池。DBCP可以直接的在应用程序中使用。

  4. DDConnectionBroker:是一个简单、轻量级的数据库连接池。

  5. DBPool:是一个高效、易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。

  6. XAPool:是一个XA数据库连接池。它实现了javax.sql.XADataSource并提供了连接池工具。

  7. Primrose:是一个Java开发的数据库连接池。当前支持的容器包括Tomcat4&5、Resin3与JBoss3。它同样也有一个独立的版本,可以在应用程序中使用而不必运行在容器中。Primrose通过一个WEB接口来控制SQL处理的追踪、配置,以及动态池管理。在重负荷的情况下可进行连接请求队列处理。

  8. SmartPool:是一个连接池组件,它模仿应用服务器对象池的特性。SmartPool能够解决一些临界问题如连接泄漏(connection leaks)、连接阻塞、打开的JDBC对象(如Statements、PreparedStatements)等。

  9. MiniConnectionPoolManager:是一个轻量级JDBC数据库连接池。它只需要Java1.5(或更高)并且没有依赖第三方包。

  10. BoneCP:是一个快速、开源的数据库连接池。帮用户管理s数据连接,让应用程序能更快速地访问数据库。比C3P0/DBCP连接池速度快25倍。Druid:Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。

支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。 Druid针对Oracle和MySql做了特别优化,比如:Oracle的PS Cache内存占用优化、MySql的ping检测优化,比如:Oracle的PS Cache内存占用优化、MySql的ping检测优化

五、实例

public class DBCPUtil {
	//每个找程使用自己的ThreadLocal对象
	private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();
	private static DataSource ds;
	//私有构造方法。外部不能new
	private DBCPUtil() {
	}
	static {
		//加载数据wds对象
		Inputstream is = DBCPUtil.class.getResourceAsstream("/mysql.properties"); 
		Properties properties = new Properties();
		try {
			properties.1oad(is);
			DBCPUtil.ds = BasicDatasourceFactory.createDatasource(properties);
		} catch (IOException e) {
			e.printstackTrace();
		} catch (Exception e) {
			e.printstackTrace();
		}
	}
	public static Connection getConn();
	public static void closeConn();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值