概述

数据库连接池技术:管理连接对象。

  • 应用程序就不需要创建和断开连接对象,而是交给数据库连接池管理
  • 数据库连接池断开,不是销毁对象,而是把连接对象归还给连接池

基本参数

  • 初始化大小:散据库连接池里面初始的连接对象个数
  • 最大连接数:数据库连接池里面最大的连接对象个数
  • 最大等待时间:用户通过连接池取连接对象时,需要等待的时间
  • 最大空闲连接:数据库连接池里面,在用户访问趋于稳定时,最大的空闲连接个数
  • 最小空闲连接:在用户访问趋于顶峰时,数据库连接池里面剩余的最小连接对象个数。

DBCP

DBCP数据库连接池(DataBase Connection Pool),是由apache组织提供的数据库连接池技术,开源免费。

使用DBCP的基本步骤:

  • 导包:commons-dbcp.jar,commons-pool.jar
  • DBCP获取连接对象:设置连接参数。
    • 四个连接参数:driverName,ur1,username,password.
  • DBCP获取连接对象具体的方式:
    • 第一种:直接使用BasicDatasource类创建连接对象。
    • 第二种:通过读取配置文件创建连接对象

源码

使用BasicDatasource类方式:

package p01_DBCP;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class DBCP_test_1 {

	public static DataSource ds = null;
	static{
		//获取DBCP数据源
		BasicDataSource bds = new BasicDataSource();
		//设置连接数据库需要的参数
		bds.setDriverClassName("com.mysql.jdbc.Driver");
		bds.setUrl("jdbc:mysql://localhost:3306/jdbc");
		bds.setUsername("root");
		bds.setPassword("root");
		//设置连接池参数
		bds.setInitialSize(5);//初始化连接对象个数
		bds.setMaxActive(10);//最大连接数
		ds = bds ;
		
	}
	
	public static void main(String[] args) {
		try {
			Connection con = ds.getConnection();
			DatabaseMetaData metaData = con.getMetaData();
			System.out.println(metaData.getDriverName());
			System.out.println(metaData.getURL());
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

使用读取配置文件方式,注意此处配置文件要放在src下

package p01_DBCP;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DBCP_test_2 {

	public static DataSource ds;
	static {
		Properties prop = null ;
		try {
			//加载配置文件对象
			prop = new Properties();
			//获取配置文件的字节输入流
			ClassLoader classLoader = new DBCP_test_2().getClass().getClassLoader();
			InputStream in = classLoader.getResourceAsStream("dbcpconfig.properties");
			//加载配置文件
			prop.load(in);
			//创建数据源对象
			ds = BasicDataSourceFactory.createDataSource(prop);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		try {
			Connection con = ds.getConnection();
			DatabaseMetaData metaData = con.getMetaData();
			System.out.println(metaData.getDriverName());
			System.out.println(metaData.getURL());
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
 #连接设置
 driverClassName=com.mysql.jdbc.Driver
 url=jdbc:mysql://localhost:3306/jdbc
 username=root
 password=root
 #初始化连接
 initialSize=5
 #最大连接数量
 maxActive=10
 #最大空闲连接
 maxIdle=10

C3P0

C3P0数据源是目前最流行的数据库连接池技术之一,它的性能更加优越,也提供了对后期数据框架hibernate很好的支持,它也是开源免费。

使用C3P0的基本步骤:

  • 导包:c3p0-0.9.1.2.jar
  • 设置连接参数:
    • 四个连接参数:driverName,ur1,username,password.
  • C3P0获取连接对象具体的方式:
    • 第一种:通过ComboPooledDataSource的构造方法获取数据源对象,从而获取连接对象
    • 第二种:通过配置文件获取数据源对象,从而获取连接对象。

源码

通过ComboPooledDataSource类加载的方式

package p02_C3P0;

import java.beans.PropertyVetoException;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0_test {
	public static DataSource ds = null;
	//初始化c3p0数据源
	static {
		ComboPooledDataSource cpds = new ComboPooledDataSource();
		
		try {
			//设置四个连接参数
			cpds.setDriverClass("com.mysql.jdbc.Driver");
			cpds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
			cpds.setUser("root");
			cpds.setPassword("root");
			//设置连接池参数
			cpds.setInitialPoolSize(5);
			cpds.setMaxPoolSize(10);
			ds = cpds;
		} catch (PropertyVetoException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		try {
			System.out.println(ds.getConnection());
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

通过配置文件的方式:(最简单)

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">
     		jdbc:mysql://localhost:3306/jdbc
     	</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<property name="checkoutTimeout">30000</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config> 
	<named-config name="itcast">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">
           	jdbc:mysql://localhost:3306/jdbc
        </property>
		<property name="user">root</property>
		<property name="password">root</property>
		<property name="initialPoolSize">5</property>
		<property name="maxPoolSize">15</property>
	</named-config>
</c3p0-config>
package p02_C3P0;

import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0_test_2 {
	public static DataSource ds = null; 
	
	static {
		/**
		 * 构造方法中就自动加载配置文件了,所以说C3P0方式的配置文件名字必须是c3p0-config.xml
		 * 配置文件中可以书写多个配置,一个默认配置+n个命名配置
		 * 参数为空使用配置文件中的默认配置
		 * 参数有值使用配置文件中对应值的命名配置
		 * */
		ComboPooledDataSource cpds = new ComboPooledDataSource();
		ds = cpds ;
	}
	public static void main(String[] args) {
		try {
			System.out.println(ds.getConnection());
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
说点什么
暂时没有人评论
Loading...