JDBC的两种开源的数据库连接池详解_用于foxpro的开源jdbc驱动程序 开源

//(2)指定最大的连接数: 同一时刻可以同时向数据库申请的连接数
ds.setMaxActive(50);

//(3)在数据库连接池中保存的最少的空闲连接的数量
ds.setMinIdle(2);

//(4)等待数据库连接池分配连接的最长时间. 单位为毫秒. 超出该时间将抛出异常.
ds.setMaxWait(1000*5);

//4.从数据源中获取数据库连接
Connection conn = ds.getConnection();
System.out.println(conn);
}
}


**测试超过连接数**


![](https://img-blog.csdnimg.cn/img_convert/82ef5622d376b4aed60587d123d22514.png)




package com.jdbc.datasource;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbcp.BasicDataSource;

public class TestDBCP2 {

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<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());
}
}


## 方式二:


步骤:




![img](https://img-blog.csdnimg.cn/img_convert/2a194d44a5f54a7577f4f39ddb8056f0.png)
![img](https://img-blog.csdnimg.cn/img_convert/0f4b6c3f51348271ec14bfcd3bdd085f.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

J4ZBO-1714412953320)]
[外链图片转存中...(img-jJEtCKiq-1714412953321)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值