数据连接池的使用

据库连接池(connection pool) 

   在昨天的练习中每一次练习都需要与数据库建立连接,完成时断开连接,然而当处理的数据量特别的时候,就很耗费时间、降低效率,今天我们学习使用连接池,将连接放在连接池中,需要使用的时候从中取出,使用完毕放回池中并不是断开连接。

   数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
   数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
   为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。
   数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。

DBCP连接池

首先我们使用DBCP连接池(一个免费开源的连接池),我们需要先将commons-dbcp-1.4.jar文件放置当前工程下,并配置环境(添加到Build Path)。下面通过一个程序了解如何使用DBCP连接池:

我们在这里和之前一样需要创建一个“dbcp.properties”文件,将必要的参数放入其中,其内容如下,(此文件放在当前工程下),DBCP连接池使用这个文件可以完成mysql、Oracle的连接池的建立,但是每次只能建立一个,另一个需要注释起来。

driverClassName = com.mysql.jdbc.Driver

url = jdbc:mysql://127.0.0.1:3306/company

username = root

password = 123456

initialSize = 5

maxActive = 50

maxIdle = 10

#driverClassName = oracle.jdbc.driver.OracleDriver

#url = jdbc:oracle:thin:@127.0.0.1:1521:orcl

#username = scott

#password = tiger

package com.atguigu.jdbc; import Java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; import org.junit.Test; public class DBCPTest { @Test public void test2() throws Exception { Properties properties = new Properties(); properties.load(new FileInputStream("dbcp.properties")); DataSource dataSource = BasicDataSourceFactory.createDataSource(properties); System.out.println("inital:" + ((BasicDataSource)dataSource).getInitialSize()); System.out.println("getMaxActive:" + ((BasicDataSource)dataSource).getMaxActive()); System.out.println("getMaxIdle:" + ((BasicDataSource)dataSource).getMaxIdle()); Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close(); } } C3P0连接池

     下面我们学习一个功能更加强大的连接池,C3P0(仍然是一个免费开源的连接池),如上我们需要先将commons-dbcp-1.4.jar文件放置当前工程下,并配置环境(添加到Build Path)。

这里通过一个程序了解如何使用DBCP连接池:

如同DBCP连接池,我们需要创建一个“c3p0-config.xml”文件,将必要的参数放入其中,其内容如下,(此文件放在当工程的src目录)

<c3p0-config>  <named-config>  <property>com.mysql.jdbc.Driver</property> <property>jdbc:mysql://127.0.0.1:3306/school</property> <property>root</property> <property>123456</property> <property>5</property>  <property>5</property>  <property>5</property>  <property>50</property>  <property>0</property>  <property>5</property>  </named-config>  <named-config> <property>oracle.jdbc.driver.OracleDriver</property> <property>jdbc:mysql://127.0.0.1:3306/school</property> <property>root</property> <property>123456</property> </named-config> </c3p0-config>

DBCP连接池使用这个文件可以完成mysql、oracle的连接池的建立,每次只能建立一个,但是另一个需要注释起来。因为我们是根据<named-config> 名建立连接,

package com.atguigu.jdbc; import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import org.junit.Test; import com.mchange.v2.c3p0.*; public class C3P0Test { @Test public void test1() throws PropertyVetoException, SQLException { DataSource dataSource = new ComboPooledDataSource("mysql-config"); // 它会默认自动去读取文件 System.out.println(dataSource); Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close();// 把连接归还给连接池 DataSources.destroy(dataSource);// 完全释放池中所有连接,并销毁连接池!! } @Test public void test2() throws PropertyVetoException, SQLException { DataSource dataSource = new ComboPooledDataSource("oracle-config"); // 它会默认自动去读取文件 System.out.println(dataSource); Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close();// 把连接归还给连接池 DataSources.destroy(dataSource);// 完全释放池中所有连接,并销毁连接池!! } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1035a6ff680236d6cc1995d41c6acee1.html