JDBC数据连接池的使用.docx
- 文档编号:30130591
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:30
- 大小:21.69KB
JDBC数据连接池的使用.docx
《JDBC数据连接池的使用.docx》由会员分享,可在线阅读,更多相关《JDBC数据连接池的使用.docx(30页珍藏版)》请在冰豆网上搜索。
JDBC数据连接池的使用
JDBC-数据连接池的使用
数据库连接池(connectionpool)
在昨天的练习中每一次练习都需要与数据库建立连接,完成时断开连接,然而当处理的数据量特别的时候,就很耗费时间、降低效率,今天我们学习使用连接池,将连接放在连接池中,需要使用的时候从中取出,使用完毕放回池中并不是断开连接。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。
预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。
无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。
连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
DBCP连接池
首先我们使用DBCP连接池(一个免费开源的连接池),我们需要先将commons-dbcp-1.4.jar文件放置当前工程下,并配置环境(添加到BuildPath)。
下面通过一个程序了解如何使用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
[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;
importmons.dbcp.BasicDataSource;
importmons.dbcp.BasicDataSourceFactory;
importorg.junit.Test;
publicclassDBCPTest{
@Test
publicvoidtest2()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目录)
mysql:
//127.0.0.1:
3306/school
mysql:
//127.0.0.1:
3306/school
DBCP连接池使用这个文件可以完成mysql、oracle的连接池的建立,每次只能建立一个,但是另一个需要注释起来。
因为我们是根据
[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{
@Test
publicvoidtest1()throwsPropertyVetoException,SQLException{
DataSourcedataSource=newComboPooledDataSource("mysql-config");//它会默认自动去读取文件
System.out.println(dataSource);
Connectionconnection=dataSource.getConnection();
System.out.println(connection);
connection.close();//把连接归还给连接池
DataSources.destroy(dataSource);//完全释放池中所有连接,并销毁连接池!
!
}
@Test
publicvoidtest2()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.getProperty("url");
Stringuser=properties.getProperty("user");
Stringpassword=properties.getProperty("password");
//3)注册驱动,加载驱动类
Class.forName(driverClass);
//4)通过驱动管理器获取连接(需要url,用户,密码)
returnDriverManager.getConnection(url,user,password);//暗含newSocket(host,port),认证,其他各种初始化操作
}
//关闭连接
publicstaticvoidclose(Connectionconnection){
close(connection,null);
}
publicstaticvoidclose(Connectionconnection,Statementstatement){
close(connection,statement,null);
}
publicstaticvoidclose(Connectionconnection,Statementstatement,ResultSetresultSet){
if(resultSet!
=null){
try{
resultSet.close();
}catch(Exceptione){
e.printStackTrace();
}
}
if(statement!
=null){
try{
statement.close();
}catch(Exceptione){
e.printStackTrace();
}
}
if(connection!
=null){
try{
connection.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
//销毁连接池
publicstaticvoiddestroy(){
try{
DataSources.destroy(dataSource);
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
DBUtils工具类
将常用的操作数据库的JDBC的类和方法集合在一起,就是DBUtils.JDBC。
提供供我们使用的工具类QueryRunner来执行操作。
在使用之前我们仍然需要将commons-dbutils-1.3.jar添加到当前工程下,并添加到path路径。
[java]viewplaincopyprint?
在CODE上查看代码片派生到我的代码片
packagecom.atguigu.jdbc;
importjava.sql.Connection;
importjava.sql.SQLException;
importjava.util.List;
importmons.dbutils.QueryRunner;
importmons.dbutils.handlers.ArrayListHandler;
importmons.dbutils.handlers.BeanHandler;
importmons.dbutils.handlers.BeanListHandler;
importmons.dbutils.handlers.ScalarHandler;
importorg.junit.Test;
publicclassQueryRunnerTest{
//使用我们自定义工具实现表的创建
@Test
publicvoidtest1()throwsSQLException{
QueryRunnerqr=newQueryRunner();
Connectionconnection=JdbcUtil.getConnection();
qr.update(connection,"createtabletest2(aaint,bbvarchar(10))");
JdbcUtil.close(connection);
}
//使用我们自定义工具向表中插入一条记录
@Test
publicvoidtest2()throwsSQLException{
QueryRunnerqr=newQueryRunner();
Connectionconnection=JdbcUtil.getConnection();
introws=qr.update(connection,"insertintotest2(aa,bb)values(?
?
)",10,"xxx");
System.out.println(rows+"rows");
JdbcUtil.close(connection);
}
//使用DBUtils.JDBC接口中提供的方法对departments表进行查询,把结果集中的所有记录转换为department对象集合并存入List集合中,然后遍历输出对象
@Test
publicvoidtest3()throwsSQLException{
//query(Connectionconn,Stringsql,ResultSetHandler
Stringsql="select*fromdepartmentswheredepartment_id>?
";
QueryRunnerqr=newQueryRunner();
Connectionconnection=JdbcUtil.getConnection();
BeanLHandler
List
for(Departmentdepartment:
list){
System.out.println(department);
}
}
//使用DBUtils.JDBC接口中提供的方法对departments表进行查询,把结果集中的一条记录转换为department实体对象,然后输出对象
@Test
publicvoidtest4()throwsSQLException{
Stringsql="select*fromdepartmentswheredepartment_id=?
";
QueryRunnerqr=newQueryRunner();
Connectionconnection=JdbcUtil.getConnection();
BeanHandler
DepartmentobjDepartment=qr.query(connection,sql,rsh,20);
System.out.println(objDepartment);
}
//使用DBUtils.JDBC接口中提供的方法对departments表进行查询,将每一条记录存入集合中,然后遍历输出每一个数据
@Test
publicvoidtest5()throwsSQLException{
Stringsql="select*fromemployees";
QueryRunnerqr=newQueryRunner();
Connectionconnection=JdbcUtil.getConnection();
ArrayListHandlerrsh=newArrayListHandler();
List
for(Object[]objects:
list){
for(inti=0;i System.out.print(objects[i]+"\t"); } System.out.println(); } } //使用DBUtils.JDBC接口中提供的方法对departments表进行查询,将查询到的一个数据输出 @Test publicvoidtest
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JDBC 数据 连接 使用