DBCP和C3P0实现连接池技术

DBCP和C3P0实现连接池技术

本文是基于Windows 10系统环境,学习和使用连接池技术:

  • Windows 10
  • MyEclipse 10
  • DCBP
  • C3P0

一、连接池技术的基本概念

(1) 连接池出现的背景

  • 涉及频繁的数据库连接的打开、关闭,影响程序的运行效率

(2) 连接池的定义

  • 连接池是创建和管理一个连接的缓冲池的技术

(3) 实现连接池技术的相关组件

  • DBCP:Apache 软件基金组织下的开源连接池实现
  • C3P0:Spring、hiternate默认支持C3P0连接池技术

二、DBCP的使用

(1) 引入jar包文件

  • commons-dbcp-1.4.jar
  • commons-pool-1.5.6.jar

(2) 硬编码方式实现

  • java代码
package com.inspur.c_dbcp;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;
/**
 * ClassName: Demo_DBCP
 * Function: TODO ADD FUNCTION
 * @author: xuzheng
 * date: 2019-5-7 上午8:22:49
 */
public class Demo_DBCP {
	/*
	 * 硬编码方式实现连接池
	 */
	@Test
	public void testDbcp() throws Exception{
		//DBCP连接池核心类
		BasicDataSource dataSource = new BasicDataSource();
		//连接池参数配置:初始化连接数、最大连接数、连接url、驱动、用户、密码
		dataSource.setUrl("jdbc:mysql://172.30.12.59:3306/day15");//数据库连接URL
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");//数据库驱动
		dataSource.setUsername("root");//数据库用户名
		dataSource.setPassword("123456");//数据库密码
		dataSource.setInitialSize(3);//初始化连接数
		dataSource.setMaxActive(6);//最大连接数
		dataSource.setMaxIdle(3000);//最大空闲时间
		
		//获取连接
		Connection conn = dataSource.getConnection();
		conn.prepareStatement("delete from user where id=19").executeUpdate();
		conn.close();
	}
}

(3) 配置方式实现

  • 配置文件
// dbcp.properties
url=jdbc:mysql://172.30.12.59:3306/day15
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver
initialSize=3
maxActive=6
maxIdle=3000
  • java代码
package com.inspur.c_dbcp;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;
/**
 * ClassName: Demo_DBCP
 * Function: TODO ADD FUNCTION
 * @author: xuzheng
 * date: 2019-5-7 上午8:22:49
 */
public class Demo_DBCP {
	/*
	 * 配置方式实现连接池
	 */
	@Test
	public void testDbcp2() throws Exception{
		//加载prop配置文件
		Properties properties = new Properties();
	    //获取文件流
		FileInputStream inStream = new FileInputStream("./src/dbcp.properties");
		//加载属性配置文件
		properties.load(inStream);
		//根据prop配置,直接创建数据源对象
		DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
		//获取连接
		Connection conn = dataSource.getConnection();
		conn.prepareStatement("delete from user where id=17").executeUpdate();
		conn.close();
	}
}

二、C3P0的使用

(1) 引入jar包文件

  • c3p0-0.9.1.2.jar

(2) 硬编码方式实现

  • java代码
package com.inspur.d_c3p0;

import java.sql.Connection;
import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
 * ClassName: Demo_c3p0
 * Function: TODO ADD FUNCTION
 * @author: xuzheng
 * date: 2019-5-7 上午10:52:30
 */
public class Demo_c3p0 {
	/*
	 * 硬编码方式配置
	 */
	@Test
	public void testC3P0() throws Exception{
		//创建连接池核心工具类
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		//连接池参数配置:初始化连接数、最大连接数、连接url、驱动、用户、密码
		dataSource.setJdbcUrl("jdbc:mysql://172.30.12.59:3306/day15");
		dataSource.setDriverClass("com.mysql.jdbc.Driver");
		dataSource.setUser("root");
		dataSource.setPassword("123456");
		dataSource.setInitialPoolSize(3);
		dataSource.setMaxPoolSize(6);
		dataSource.setMaxIdleTime(3000);
		
		//从连接池对象中,获取连接对象
		Connection conn = dataSource.getConnection();
		//执行更新
		conn.prepareStatement("delete from user where id=15").executeUpdate();
		//关闭连接
		conn.close();
	}
}

(3) 配置方式实现

  • 配置文件 c3p0-config.xml 放在src目录下
<c3p0-config>
  <default-config>
    <property name="jdbcUrl">jdbc:mysql://172.30.12.59:3306/day15</property>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="user">root</property>
    <property name="password">123456</property>
    <property name="maxIdleTime">3000</property>
    <property name="maxPoolSize">6</property>
    <property name="initialPoolSize">3</property>
  </default-config>
  <named-config name="mysql_config">
    <property name="jdvcUrl">jdbc:mysql://172.30.12.59:3306/day15</property>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="user">root</property>
    <property name="password">123456</property>
    <property name="maxIdleTime">3000</property>
    <property name="maxPoolSize">6</property>
    <property name="initialPoolSize">3</property>
    
    <user-overrides user="poop">
      <property name="maxStatements">300</property>
    </user-overrides>
   </named-config>
</c3p0-config>
  • java代码
package com.inspur.d_c3p0;

import java.sql.Connection;
import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
 * ClassName: Demo_c3p0
 * Function: TODO ADD FUNCTION
 * @author: xuzheng
 * date: 2019-5-7 上午10:52:30
 */
public class Demo_c3p0 {
	/*
	 * 配置方式配置
	 */
	@Test
	public void testC3P0() throws Exception{
		//创建连接池核心工具类
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		//ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql_config");
		
		//从连接池对象中,获取连接对象
		Connection conn = dataSource.getConnection();
		//执行更新
		conn.prepareStatement("delete from user where id=14").executeUpdate();
		//关闭连接
		conn.close();
	}
}

你可能感兴趣的:(Java)