JavaEE之连接池的使用-C3P0与DBCP

连接池的使用-C3P0与DBCP

什么是连接池?

          之前jdbc步骤: 获取连接 -> 得到Statement->发送sql -> 关闭连接

          通讯录系统:CURD  四次

         问题:获取连接对象需要消耗比较多的资源,而每次操作都要重新获取新的连接对象,执行一次操作就把连接关闭,这样连接对象的使用效率并不高!!!

         办法:能不能让连接对象反复使用???如果可以的话,连接对象使用率提高!这就可以用连接池实现!!、

DBCP连接池

DBCP: DataBase Connection Pool

        1)Apache旗下的软件,开源连接池
        2)Tomcat的服务器的连接池默认实现
使用步骤:
        1)导入dbcp的jar包
                 commons-dbcp-1.4.jar  核心包
                 commons-pool-1.5.6.jar辅助包
        2)创建连接池对象BasicDataSource对象
        3)设置连接参数(url,user,password,dirverClass)
        4)设置连接池参数(初始连接数,最大连接数,最大等待时间)

        5)获取连接对象(getConnection() 方法)

url=jdbc:mysql://localhost:3306/day18
username=root
password=root
driverClassName=com.mysql.jdbc.Driver

initialSize=5
maxActive=12
maxWait=5000
        /**
	 * 使用配置文件方式
	 */
	//4)获取连接
	try {
		//1)使用工厂类来创建dbcp连接池对象(读取配置文件方式)
		Properties prop = new Properties();
		//使用类路径读取配置文件
		InputStream in = Demo1.class.getResourceAsStream("/jdbc.properties");
		//加载配置文件
		prop.load(in);


		BasicDataSource bds = (BasicDataSource)BasicDataSourceFactory.createDataSource(prop);
		/**
		 * 读取jdbc.properties文件内容
		 *   dbcp可以自动识别每个配置信息,但是约定前提: 配置文件的key名称和设置方法的名称保持一致!!!
		 */
		
		//从连接池中获取连接
		for(int i=1;i<=13;i++){
			Connection conn = bds.getConnection(); //注意: 这里返回的Connection对象,不是原来的Connection,而是代理后的Connection对象
			System.out.println(conn);
			
			//注意: 使用连接池,记住释放连接
		/*	if(i==3){
				conn.close();// 把连接对象放回连接池中的。连接池中最大能够保存最大连接数的连接对象
			}*/
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
C3P0连接池

特点:
1)开源连接池
2)Hibernate框架,默认推荐使用C3P0作为连接池实现
使用步骤:
1)导入c3p0的jar包        c3p0-0.9.1.2.jar 核心包
2)创建连接池对象ComboPooledDataSource对象
3)设置连接参数(url,user,password,dirverClass)
4)设置连接池参数(初始连接数,最大连接数,最大等待时间)

5)获取连接对象(getConnection() 方法)

<c3p0-config>
	<!-- 默认配置 -->
  <default-config>
  		<!-- 连接参数 -->
    	<property name="jdbcUrl">jdbc:mysql://localhost:3306/day18</property>
    	<property name="user">root</property>
    	<property name="password">root</property>
    	<property name="driverClass">com.mysql.jdbc.Driver</property>
    	<!-- 连接池参数 -->
    	<property name="initialPoolSize">5</property>
    	<property name="maxPoolSize">12</property>
    	<property name="checkoutTimeout">5000</property>
    	<property name="minPoolSize">3</property>
  </default-config>
	<!-- 命名配置 -->
  <named-config name="oracle">
   		 <!-- 连接参数 -->
    	<property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
    	<property name="user">eric</property>
    	<property name="password">123456</property>
    	<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
    	
    	<!-- 连接池参数 -->
    	<property name="initialPoolSize">5</property>
    	<property name="maxPoolSize">12</property>
    	<property name="checkoutTimeout">5000</property>
    	<property name="minPoolSize">3</property>
   </named-config>
</c3p0-config>
	/**
	 * 使用xml配置文件读取c3p0的方法
	 * 	注意:
	 * 		1)需要把一个名称为c3p0-config.xml文件放在src目录下,c3p0会自动读取这个文件。
	 * 		2)xml配置文件中属性名称和手动设置方法名保持一致!!!!c3p0则会自动读取
	 */
	
	//1)创建连接池对象
	
	/**
	 *   1)new ComboPooledDataSource(): 使用没有参数的构造方法,读取的是default-config的配置信息
	 *   2)new ComboPooledDataSource(name的属性值): 使用有参的构造方法,读取的是name-config配置信息
	 */
	//ComboPooledDataSource cds = new ComboPooledDataSource();
	ComboPooledDataSource cds = new ComboPooledDataSource("oracle");
	
	//2)获取连接
	for(int i=1;i<=13;i++){
		Connection conn = cds.getConnection();
		System.out.println(conn);
		
		//关闭第3个
		if(i==3){
			conn.close();//本质是把连接对象放回连接池中
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值