数据库连接池

时间:2022-08-23 13:19:39

思考:

程序中连接如何管理?

           1. 连接资源宝贵;需要对连接管理

           2. 连接:

                   a) 操作数据库,创建连接

                   b) 操作结束,  关闭!

   分析:

                    涉及频繁的连接的打开、关闭,影响程序的运行效率!

   连接管理:

          预先创建一组连接,有的时候每次取出一个; 用完后,放回;

 

   学习连接池:

                    a. 自定义一个连接池

                    b. 学习优秀的连接池组件

                           a) DBCP

                           b) C3P0

2.开源的连接池技术

概述:

                          Sun公司约定: 如果是连接池技术,需要实现一个接口!

                          javax.sql.DataSource;

 

连接池:

                 DBCP

                 C3P0

 

2.1 DBCP连接池:

l DBCP Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar文件:

           • Commons-dbcp.jar:连接池的实现

           • Commons-pool.jar:连接池实现的依赖库

l Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

核心类:BasicDataSource

使用步骤

• 引入jar文件

l commons-dbcp-1.4.jar

l commons-pool-1.5.6.jar

 

public class App_DBCP {

 

// 1. 硬编码方式实现连接池

@Test

public void testDbcp()throws Exception {

// DBCP连接池核心类

BasicDataSource dataSouce = new BasicDataSource();

// 连接池参数配置:初始化连接数、最大连接数/ 连接字符串、驱动、用户、密码

dataSouce.setUrl("jdbc:mysql:///jdbc_demo");//数据库连接字符串

dataSouce.setDriverClassName("com.mysql.jdbc.Driver");  //数据库驱动

dataSouce.setUsername("root");//数据库连接用户

dataSouce.setPassword("root");//数据库连接密码

dataSouce.setInitialSize(3);  //初始化连接

dataSouce.setMaxActive(6);  //最大连接

dataSouce.setMaxIdle(3000);   //最大空闲时间

// 获取连接

Connection con = dataSouce.getConnection();

con.prepareStatement("delete from admin where id=3").executeUpdate();

// 关闭

con.close();

}

@Test

// 2. 【推荐】配置方式实现连接池  ,  便于维护

public void testProp()throws Exception {

// 加载prop配置文件

Properties prop = new Properties();

// 获取文件流

InputStream inStream = App_DBCP.class.getResourceAsStream("db.properties");

// 加载属性配置文件

prop.load(inStream);

// 根据prop配置,直接创建数据源对象

DataSource dataSouce = BasicDataSourceFactory.createDataSource(prop);

// 获取连接

Connection con = dataSouce.getConnection();

con.prepareStatement("delete from admin where id=4").executeUpdate();

// 关闭

con.close();

}

}

配置方式实现DBCP连接池,  配置文件中的keyBaseDataSouce中的属性一样:

db.properties

url=jdbc:mysql:///jdbc_demo

driverClassName=com.mysql.jdbc.Driver

username=root

password=root

initialSize=3

maxActive=6

maxIdle=3000

 

 

2.2 C3P0连接池:

C3P0连接池:

最常用的连接池技术!Spring框架,默认支持C3P0连接池技术!

C3P0连接池,核心类:

CombopooledDataSource ds;

使用:

1. 下载,引入jar文件:  c3p0-0.9.1.2.jar

2. 使用连接池,创建连接

             a) 硬编码方式

             b) 配置方式(xml)

 

 

public class App {

 

@Test

//1. 硬编码方式,使用C3P0连接池管理连接

public void testCode()throws Exception {

// 创建连接池核心工具类

ComboPooledDataSource dataSource =new ComboPooledDataSource();

// 设置连接参数:url、驱动、用户密码、初始连接数、最大连接数

dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc_demo");

dataSource.setDriverClass("com.mysql.jdbc.Driver");

dataSource.setUser("root");

dataSource.setPassword("root");

dataSource.setInitialPoolSize(3);

dataSource.setMaxPoolSize(6);

dataSource.setMaxIdleTime(1000);

// ---> 从连接池对象中,获取连接对象

Connection con = dataSource.getConnection();

// 执行更新

con.prepareStatement("delete from admin where id=7").executeUpdate();

// 关闭

con.close();

}

@Test

//2. XML配置方式,使用C3P0连接池管理连接

public void testXML()throws Exception {

// 创建c3p0连接池核心工具类

// 自动加载srcc3p0的配置文件【c3p0-config.xml

ComboPooledDataSource dataSource =new ComboPooledDataSource();//使用默认的配置

// 获取连接

Connection con = dataSource.getConnection();

// 执行更新

con.prepareStatement("delete from admin where id=5").executeUpdate();

// 关闭

con.close();

}

}

 

 

2.3 优化

     项目,连接的管理,交给连接池!