目录

DBCP连接池

代码配置

配置文件配置

配置文件的内容

c3p0连接池

c3p0的xml配置

配置文件方式

代码方式


前言

数据库连接池的原理和为什么要使用数据库连接池

这里会介绍多种连接池,且都是使用java操作

java中Druid配置数据库连接池 java 数据库连接池配置_配置文件

 

DBCP连接池

由Apache开发,tomcat就是他们开发的,导入dbcp的jar包,dbcp的jar有2个,还有一个是pool.jar

dbcp的配置有2种配置方式

 

代码配置

操作数据库的方式是一样的,只是获取连接的方式变了,不再是直接注册驱动获取连接,而是从连接池里拿连接对象

public static void main(String[] args) throws SQLException
	{
		//创建连接池对象
		BasicDataSource dataSource1=new BasicDataSource();
		
		//设置连接数据库的参数
		dataSource1.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource1.setUrl("jdbc:mysql://localhost/test");
		dataSource1.setUsername("root");
		dataSource1.setPassword("root");
		
		//获取连接对象
		Connection conn1=dataSource1.getConnection();
		
		//执行语句
		String sql="insert into product values(null,?)"; 
		PreparedStatement  ps1=conn1.prepareStatement(sql);
		ps1.setString(1, "lover test");
		ps1.executeUpdate();
		
		//关闭资源,不过一般情况下是不用关闭的
		//dataSource1.close();
	}

 

配置文件配置

把配置放在配置文件里,推荐的是这种方式,降低耦合性,方便修改

// 使用配置文件的方法获取参数连接数据库
	public static void test2() throws Exception
	{
		// 加载配置文件,配置文件放到src下面,这样发布到tomcat后就是在classes文件夹里
		Properties properties1 = new Properties();
		
		//加载配置文件DBCPDemo是本类的类名
		InputStream iStream1 = DBCPDemo.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");

		// 加载配置文件
		properties1.load(iStream1);

		// 通过配置文件获取连接池对象
		// createDataSource是一个静态的对象,在BasicDataSourceFactory(资源工厂)里
		DataSource dataSource1 = BasicDataSourceFactory.createDataSource(properties1);

		// 获取连接对象
		Connection  conn1 = dataSource1.getConnection();

		// 执行语句
		String sql = "insert into product values(null,?)";
		PreparedStatement ps1 = conn1.prepareStatement(sql);
		ps1.setString(1, "test_two");
		ps1.executeUpdate();

	}

配置文件的内容

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root

#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 60000毫秒/1000等于60秒 -->
maxWait=60000


#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
connectionProperties=useUnicode=true;characterEncoding=UTF-8

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

 

c3p0连接池

c3p0配置文件是xml形式的

下面是直接从c3p0的文档复制过来的,名字要固定,就叫c3p0-config.xml  且放到src目录下

c3p0有一个优点,那就是可以切换数据库,如果我们的项目其它公司,但是他们公司用的是Oracle

那么我们直接发Oracle版的c3p0配置文件给它即可,这里不做详解

如需要   

c3p0的xml配置

如下,具体语句的意思,参考上面即可链接即可

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

	<!-- default-config 默认的配置,  -->
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost/test</property>
    <property name="user">root</property>
    <property name="password">root</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>
 
</c3p0-config>

配置文件方式

// 使用xml配置文件的方法获取参数连接数据库
	public static void test2() throws SQLException, PropertyVetoException
	{
		// 创建连接池对象并且自动加载配置文件,所以一定要放到src下,当然也可以改
		//可以指定数据库,不指定就是用默认的
		// ComboPooledDataSource dataSource1=new ComboPooledDataSource("oracle");
		ComboPooledDataSource dataSource1 = new ComboPooledDataSource();
		// 获取连接对象
		Connection conn1 = dataSource1.getConnection();

		// 执行语句
		String sql = "insert into product values(null,?)";
		PreparedStatement ps1 = conn1.prepareStatement(sql);
		ps1.setString(1, "c3p0");
		ps1.executeUpdate();
	}

代码方式

public static void test1() throws SQLException, PropertyVetoException
	{
		// 创建连接池对象
		ComboPooledDataSource dataSource1 = new ComboPooledDataSource();

		// 设置连接数据库的参数
		dataSource1.setDriverClass("com.mysql.jdbc.Driver");
		dataSource1.setJdbcUrl("jdbc:mysql://localhost/test");
		dataSource1.setUser("root");
		dataSource1.setPassword("root");

		// 获取连接对象
		Connection conn1 = dataSource1.getConnection();

		// 执行语句
		String sql = "insert into bank values(null,?)";
		PreparedStatement ps1 = conn1.prepareStatement(sql);
		ps1.setString(1, "c3p0");
		ps1.executeUpdate();
	}