学习笔记(1):JDBC连接池

一.什么是JDBC连接池

概念:存放数据库连接的一个容器(集合)Connection

当系统运行起来之后,这个连接池就被创建,在这个连接池当中,会申请一些对象,当有用户来访问数据库的时候,就从这个连接池当中获取连接对象,用户访问结束之后,连接池对象会归还给容器

二.为什么要用JDBC连接池

普通的JDBC数据库连接(Connectiond对象)使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间),数据库的连接是比较昂贵的(创建的成本比较大)。

需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。

数据库的连接资源并没有得到很好的重复利用.若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。

三.JDBC连接池的作用

因为建立数据库连接是一个非常耗时、耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去,极大的提高了数据库连接的性能问题,节省了资源和时间。

Java数据库连接JDBC :jdbc就是Java数据库链接,原名Java data base connectivity

四.JDBC连接池的使用

大体上可以分为两类:

一.自定义连接池:
 1.创建一个类实现javax.jdbc.dataSource 类 。
 2.创建一个 存放多个连接的容器 ,因为需要经常删除 ,查         找  。   这里用LinkedList   容器。
 3.在MyDataSource类中静态代码块中创建多个连接,添加到连接池容器中  (这里面创建连接可以直接使用 com.jdbc.connection包中的jdbcConnection 中的静态方法getConnection
 4.重写Datasource 方法中的 getConnection()  方法  
 5在MyDataSource方法中添加  一个 把当前连接归还给连接池的方法
二.使用开源的数据库连接池
1、JDBC 的数据库连接池使用 javax.sql.DataSource 来表示,DataSource 只是一个接口,该接口通常由服务器(Weblogic, WebSphere, Tomcat)提供实现,也有一些开源组织提供实现:
1.C3P0

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范 和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

c3p0所需jar:c3p0-0.9.2.1.jar mchange-commons-java-0.2.3.4.jar

2.DBCP

DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接 池项目,也是 tomcat 使用的连接池组件。
使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

3.Proxool

Proxool是一种Java数据库连接池技术。sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。

4.BoneCP

是一个开源组织提供的数据库连接池,速度快。

5.Druid

是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool优点于一身的数据库连接池,但是速度不确定是否有BoneCP快。

2、DataSource 通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池
3、DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。
以Druid(德鲁伊)数据库连接池作为例子:
import javax.sql.DataSource; import
com.alibaba.druid.pool.DruidDataSourceFactory;

public class TestDruid { 	public static void main(String[] args)
throws Exception { 		Properties pro = new Properties();		
pro.load(TestDruid.class.getClassLoader().getResourceAsStream("druid.properties"));
		DataSource ds = DruidDataSourceFactory.createDataSource(pro);
		Connection conn = ds.getConnection(); 		System.out.println(conn); 	}
} ```

src下的配置文件为:(druid.properties):

url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
username=root password=123456 driverClassName=com.mysql.jdbc.Driver

initialSize=10 maxActive=20 maxWait=1000 filters=wall ```
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值