您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > JDBC-数据连接池的使用
JDBC-数据连接池的使用数据库连接池(connectionpool)在昨天的练习中每一次练习都需要与数据库建立连接,完成时断开连接,然而当处理的数据量特别的时候,就很耗费时间、降低效率,今天我们学习使用连接池,将连接放在连接池中,需要使用的时候从中取出,使用完毕放回池中并不是断开连接。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。DBCP连接池首先我们使用DBCP连接池(一个免费开源的连接池),我们需要先将commons-dbcp-1.4.jar文件放置当前工程下,并配置环境(添加到BuildPath)。下面通过一个程序了解如何使用DBCP连接池:我们在这里和之前一样需要创建一个“dbcp.properties”文件,将必要的参数放入其中,其内容如下,(此文件放在当前工程下),DBCP连接池使用这个文件可以完成MySQL、Oracle的连接池的建立,但是每次只能建立一个,另一个需要注释起来。driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/companyusername=rootpassword=123456initialSize=5maxActive=50maxIdle=10#driverClassName=oracle.jdbc.driver.OracleDriver#url=jdbc:oracle:thin:@127.0.0.1:1521:orcl#username=scott#password=tiger[java]viewplaincopyprint?在CODE上查看代码片派生到我的代码片packagecom.atguigu.jdbc;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.sql.Connection;importjava.sql.SQLException;importjava.util.Properties;importjavax.sql.DataSource;importorg.apache.commons.dbcp.BasicDataSource;importorg.apache.commons.dbcp.BasicDataSourceFactory;importorg.junit.Test;publicclassDBCPTest{@Testpublicvoidtest2()throwsException{Propertiesproperties=newProperties();properties.load(newFileInputStream(dbcp.properties));DataSourcedataSource=BasicDataSourceFactory.createDataSource(properties);System.out.println(inital:+((BasicDataSource)dataSource).getInitialSize());System.out.println(getMaxActive:+((BasicDataSource)dataSource).getMaxActive());System.out.println(getMaxIdle:+((BasicDataSource)dataSource).getMaxIdle());Connectionconnection=dataSource.getConnection();System.out.println(connection);connection.close();}}C3P0连接池下面我们学习一个功能更加强大的连接池,C3P0(仍然是一个免费开源的连接池),如上我们需要先将commons-dbcp-1.4.jar文件放置当前工程下,并配置环境(添加到BuildPath)。这里通过一个程序了解如何使用DBCP连接池:如同DBCP连接池,我们需要创建一个“c3p0-config.xml”文件,将必要的参数放入其中,其内容如下,(此文件放在当工程的src目录)c3p0-confignamed-configname=mysql-configpropertyname=driverClasscom.mysql.jdbc.Driver/propertypropertyname=jdbcUrljdbc:mysql://127.0.0.1:3306/school/propertypropertyname=userroot/propertypropertyname=password123456/propertypropertyname=acquireIncrement5/propertypropertyname=initialPoolSize5/propertypropertyname=minPoolSize5/propertypropertyname=maxPoolSize50/propertypropertyname=maxStatements0/propertypropertyname=maxStatementsPerConnection5/property/named-confignamed-configname=orcale-configpropertyname=driverClassoracle.jdbc.driver.OracleDriver/propertypropertyname=jdbcUrljdbc:mysql://127.0.0.1:3306/school/propertypropertyname=userroot/propertypropertyname=password123456/property/named-config/c3p0-configDBCP连接池使用这个文件可以完成mysql、oracle的连接池的建立,每次只能建立一个,但是另一个需要注释起来。因为我们是根据named-configname=mysql-config名建立连接,[java]viewplaincopyprint?在CODE上查看代码片派生到我的代码片packagecom.atguigu.jdbc;importjava.beans.PropertyVetoException;importjava.sql.Connection;importjava.sql.SQLException;importjavax.sql.DataSource;importorg.junit.Test;importcom.mchange.v2.c3p0.*;publicclassC3P0Test{@Testpublicvoidtest1()throwsPropertyVetoException,SQLException{DataSourcedataSource=newComboPooledDataSource(mysql-config);//它会默认自动去读取文件System.out.println(dataSource);Connectionconnection=dataSource.getConnection();System.out.println(connection);connection.close();//把连接归还给连接池DataSources.destroy(dataSource);//完全释放池中所有连接,并销毁连接池!!}@Testpublicvoidtest2()throwsPropertyVetoException,SQLException{DataSourcedataSource=newComboPooledDataSource(oracle-config);//它会默认自动去读取文件System.out.println(dataSource);Connectionconnection=dataSource.getConnection();System.out.println(connection);connection.close();//把连接归还给连接池DataSources.destroy(dataSource);//完全释放池中所有连接,并销毁连接池!!}}学习了连接池之后,JdbcUtil工具类中的getConnection方法就可以应用,如下:[java]viewplaincopyprint?在CODE上查看代码片派生到我的代码片packagecom.atguigu.jdbc;importjava.io.FileInputStream;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Properties;importjavax.sql.DataSource;importcom.mchange.v2.c3p0.ComboPooledDataSource;importcom.mchange.v2.c3p0.DataSources;/***预备工作:*1)把要访问的数据库相关的驱动程序复制到项目中,就是jar包*2)配置项目属性,把jar包导入到本项目的buildpath中*@authorAdministrator**/publicclassJdbcUtil{privatestaticDataSourcedataSource;//声明静态属性对象引用.static{dataSource=newComboPooledDataSource(mysql-config);//连接池对象只需要创建一次就可以了}publicstaticConnectiongetConnection()throwsSQLException{returndataSource.getConnection();//要想获取连接,只需要从连接池中获取,用完以后,再归还回来}publicstaticConnectiongetConnectionOld()throwsIOException,ClassNotFoundException,SQLException{//1)读取配置文件Propertiesproperties=newProperties();properties.load(newFileInputStream(jdbc.properties));//2)获取配置文件中的必要的信息StringdriverClass=properties.getProperty(driverClass);Stringurl=properties.getP
本文标题:JDBC-数据连接池的使用
链接地址:https://www.777doc.com/doc-2881804 .html