//4.从数据源中获取数据库连接
for(int i=0;i<6;i++){
Connection conn = ds.getConnection();
System.out.println(“获取第”+(i+1)+“个”+conn);
//这里没有关闭,即没有放回连接池
}
}
}
**测试如果连接重复使用**
package com.jdbc.datasource;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;
public class TestDBCP3 {
public static void main(String[] args) throws SQLException {
//1.创建DBCP数据源(即连接池)
BasicDataSource ds = new BasicDataSource();
//2.设置数据源的必须属性
ds.setDriverClassName(“com.mysql.jdbc.Driver”);
ds.setUrl(“jdbc:mysql://localhost:3306/test”);
ds.setUsername(“root”);
ds.setPassword(“root”);
//3.设置数据源的可选属性
//(1)指定数据库连接池中初始化连接数的个数
ds.setInitialSize(3);
//(2)指定最大的连接数: 同一时刻可以同时向数据库申请的连接数
ds.setMaxActive(5);
//(3)指定最小活跃的连接数: 在数据库连接池中保存的最少的空闲连接的数量
ds.setMinIdle(2);
//(4)等待数据库连接池分配连接的最长时间. 单位为毫秒. 超出该时间将抛出异常.
ds.setMaxWait(1000*5);
//4.从数据源中获取数据库连接
for(int i=0;i<10;i++){
new Thread(){
public void run(){
try {
Connection conn = ds.getConnection();
System.out.println(“获取1个”+conn);
Thread.sleep(3000);
//隔3秒换回去
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
}
## 方式二:
**优化代码:**
直接使用BasicDataSource,耦合,而且在代码中需要很多setXxx()设置属性值
使用dbcp.properties属性配置文件和BasicDataSourceFactory更灵活
步骤:
1. 加载 dbcp 的 properties 配置文件: 配置文件中的键需要来自 BasicDataSource的属性.
2. 调用 BasicDataSourceFactory 的 createDataSource 方法创建 DataSource实例
3. 从 DataSource 实例中获取数据库连接.
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
initialSize=3
maxActive=5
minIdle=2
maxWait=5000
package com.jdbc.datasource;
import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class TestDBCP3 {
public static void main(String[] args) throws Exception {
//1.获取配置文件信息
//注意:配置文件中的key来自BasicDataSourceFactory的属性(set方法后面单词首字母改小写即可)
Properties pro = new Properties();
pro.load(ClassLoader.getSystemResourceAsStream(“dbcp.properties”));
//2.创建DBCP数据源(即连接池)
DataSource ds = BasicDataSourceFactory.createDataSource(pro);
//3.从数据源中获取数据库连接
Connection conn = ds.getConnection();
System.out.println(“获取1个”+conn);
}
}
**JDBCUtils修改DBCP版:**
package com.atguigu.utils;
import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class DBCPUtils {
private static Properties pro = new Properties();
private static DataSource ds ;
static{
try {
//加载,读取jdbc.properties配置的信息
pro.load(ClassLoader.getSystemClassLoader().getResourceAsStream(“dbcp.properties”));
//创建池子
ds = BasicDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection()throws Exception{
return ds.getConnection();
}
}
## 2、C3P0数据源
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能
## 方式一:
步骤:
1、加入jar
如果是c3p0-0.9.1.2版本,加入一个jar即可c3p0-0.9.1.2.jar
如果是c3p0-0.9.2之后的版本,需要加入两个jar:c3p0-0.9.X.jar和
mchange-commons-java-XX.jar
2、编写代码
package com.jdbc.datasource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class TestC3P0 {
public static void main(String[] args)throws Exception {
//1、创建c3p0数据源对象
ComboPooledDataSource ds = new ComboPooledDataSource();
//2、设置必须属性
ds.setDriverClass( “com.mysql.jdbc.Driver” );
ds.setJdbcUrl( “jdbc:mysql://localhost:3306/test” );
ds.setUser(“root”);
ds.setPassword(“root”);
//3、获取连接
System.out.println(ds.getConnection());
}
}
## 方式二:
步骤:
1. 在src目录创建 c3p0-config.xml 文件, 参考帮助文档中 Appendix B: Configuation Files 的内容
2. 创建 ComboPooledDataSource 实例;
DataSource dataSource = new ComboPooledDataSource("helloc3p0");
3. 从 DataSource 实例中获取数据库连接.
<?xml version="1.0" encoding="UTF-8"?>
[I1]
root
root
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/test
5
5
5
10
package com.jdbc.datasource;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class TestC3P02 {
public static void main(String[] args)throws Exception {
DataSource dataSource = new ComboPooledDataSource("helloc3p0");
System.out.println(dataSource.getConnection());
}
}
JDBCUtils修改成c3p0版
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
89559)]
[外链图片转存中…(img-mAaHwYNe-1714156189559)]
[外链图片转存中…(img-dTyDvucm-1714156189560)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新