DBCP数据源

使用DBCP数据源,需要导入两个jar包

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

Common-pool.jar:连接池实现的依赖库。

导入mysql的jar包。

DBCP核心API

BasciDataSource   它可以通过实例化对象的方式获得一个对象。

它里面有如下方法:

setDriverClassName(String driverClassName) 设置驱动类的名称。

setInitialSize(int initialSize) 设置初始化时的链接数目。

setMaxActive(int maxIdle) 设置最大的并发访问数量。

setMaxIdle(int maxIdle): 设置最大的闲置数目。

setPassword:用于设置密码。

setUrl:设置url

setUsername:设置用户名。

数据源实现BasicDataSourceFactory   用于创建数据源的工厂类,

不设配置文件时使用BasicDataSource的程序的写法:

package cn.toto.utils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class JdbcUtils {

private JdbcUtils(){}

//定义BasicDataSource的父类接口的形式,获得ds的参数。

private static DataSource ds;

static {

//要想使用写好的数据源的功能,得先初始化一个dbcp连接池

BasicDataSource bds = new BasicDataSource();

//设置一系列参数

bds.setDriverClassName("com.mysql.jdbc.Driver");

bds.setUrl("jdbc:mysql://localhost:3306/day14");

bds.setUsername("root");

bds.setPassword("123456");

//设置初始化大小

bds.setInitialSize(5); //初始时设置5个连接数

bds.setMaxActive(20);//设置并发访问数目。

//bds.setMaxWait(0);//设置最大等待时间。不等待。

ds = bds;  //获得数据是通过父接口的DataSource接口。

}

//获得连接池

public static DataSource getDataSource(){

return ds;

}

//获得与指定数据库的连接

public static Connection getConnection() throws SQLException{

//从连接池返回一个连接

return ds.getConnection();

}

public static void release(ResultSet rs,Statement stmt,Connection conn){

if(rs!=null) {

try{

rs.close();

}catch(SQLException e){

e.printStackTrace();

}

rs = null;

}

if(stmt!=null){

try{

stmt.close();

}catch(SQLException e){

e.printStackTrace();

}

stmt = null;

}

if(conn!= null) {

try{

conn.close();

}catch(SQLException e){

e.printStackTrace();

}

conn = null;

}

}

}

用于验证的主函数的写法:

package cn.toto.demo;

import java.sql.Connection;

import java.sql.SQLException;

import cn.toto.utils.JdbcUtils;

public class Demo {

public static void main(String[] args) throws SQLException {

for(int i=0;i<30;i++){

Connection conn = JdbcUtils.getConnection();//如果只写这句,程序将一直等待执行。

System.out.println(conn);//不写下面一句时,打印输出,验证是否有20条,结果是20条

conn.close();//用一个放回一个,加上这一句之后将出现30条数据。

}

}

}

在文档中还有一个方法:

org.apache.commons.dbcp
Class BasicDataSourceFactory它里面有一个这样的方法:

createDataSource(Properties properties)
          Creates andconfigures a BasicDataSourceinstance based on the given properties.

它是根据Properties,根据properties中的信息获得信息。

配置dbcp的配置文件的方法是:找到文档中的Configuration,里面有多个属性。

在src下面编写一个一个配置文件config.properties

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/day14

username=root

password=123456

initialSize=5

maxiActive=20

通过配置文件的方式获得的数据源的源码是:

package cn.toto.utils;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class JdbcUtils {

private JdbcUtils() {

}

// 定义BasicDataSource的父类接口的形式,获得ds的参数。

private static DataSource ds;

static {

try {

InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream(

"config.properties");//通过类加载的方式获得获得配置文件的流

Properties prop = new Properties();

prop.load(in);//通过流将配置项加载进来。

//通过工厂类读取

ds = BasicDataSourceFactory.createDataSource(prop);

} catch (Exception e) {

throw new ExceptionInInitializerError();

}

}

// 获得连接池

public static DataSource getDataSource() {

return ds;

}

// 获得与指定数据库的连接

public static Connection getConnection() throws SQLException {

// 从连接池返回一个连接

return ds.getConnection();

}

public static void release(ResultSet rs, Statement stmt, Connection conn) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

rs = null;

}

if (stmt != null) {

try {

stmt.close();

} catch (SQLException e) {

e.printStackTrace();

}

stmt = null;

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

conn = null;

}

}

}

03_dbcp数据源依赖jar包,DBCP中API介绍,不同过dbcp方式使用dbcp数据库连接池,通过配置文件使用dbcp数据库连接池相关推荐

  1. java工程加包_Java工程中添加依赖jar包不起作用问题总结

    Java工程中添加依赖jar包不起作用问题总结 此次总结两种方式的依赖问题 1 在Eclipse中添加依赖jar包不起作用问题 这种方式可能是Eclipse缓存,或者Eclipse还没有反应过来.例如 ...

  2. maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理...

    2019独角兽企业重金招聘Python工程师标准>>> maven依赖本地非repository中的jar包 http://www.cnblogs.com/piaolingxue/a ...

  3. Eclipse下新建Maven项目、自动打依赖jar包

    当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说,书房只有一个,但外面的书店有很多,类似第,对于Maven来说,每个用户只有一个本地仓库,但可以配置访 ...

  4. 解决Gradle生成Eclipse支持后,发布到Tomcat丢失依赖jar包的问题

    最近一个项目中,使用号称下一代构建工具的Gradle构建项目. 使用中发现一个问题,Gradle从中央库下载的jar文件在系统的其它目录,使用gradle eclipse添加Eclipse支持时,ja ...

  5. Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法

    Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法. 一个Java老项目,更新了日志工具,升级为Log4j2,在引入log4j-api-2.14.0.jar 和log4j-core-2. ...

  6. 关闭依赖jar包日志

    关闭依赖jar包日志 在有的时候,我们会频繁的更换依赖,对依赖中的某些日志是不需要输出的,这个时候我们该怎么做呢.下面我就来说下我的以个解决方案. 比如管理jar包中DefaultConnection ...

  7. 解决maven打包时手动添加的依赖jar包打不进去的情况

    这个问题忙了我一天多的时间,因为太棘手了, 所以记录下来,防止忘记: 问题是这样的,因为项目中用到了自定义的jar包,也就是远程仓库里没有的jar,所以想要引用就必须自己手动添加进去,在idea中运行 ...

  8. springboot依赖lib外置打成压缩包,以及snapshot依赖jar包ClassNotFoundExcepttion异常的解决办法

    springboot依赖lib外置打成压缩包,以及snapshot依赖jar包ClassNotFoundExcepttion异常的解决办法 mvn插件 assembly压缩zip assembly.x ...

  9. IDEA导出项目依赖jar包

    文章目录 在maven项目中往往会遇到,只导出maven仓库中在该项目中涉及的jar包: File => Project Structure => Project Settings =&g ...

最新文章

  1. Python 精选笔试面试习题—sorted 与 sort 单例模式、统计字符个数Count、垃圾回收、lambda函数、静态方法、类方法、实例方法、分布式锁、
  2. Spring Security过滤器就该这么配置!
  3. python多线程加锁异步处理装饰器
  4. day01: oracle12C在Linux7.5上图形化安装部署方法:
  5. 2021-04-17 安装Ubuntu18.0.4 的深度学习训练服务器
  6. NYOJ 631 冬季长跑
  7. 反射_Class对象功能_获取Method
  8. windows中 修改某种文件图标 的方法 (备忘)
  9. Java:不朽的对象和对象复活
  10. ReactiveCocoa简单介绍
  11. Linux 实操———— Shell 远程执行命令
  12. 利用hibernate中的SchemaExport生成数据表
  13. python-day19-面向对象进阶-加载顺序,命名空间,组合(实现松耦合)
  14. UVA 1411 - Ants(二分图完美匹配)
  15. mysql如何保证数据不丢失_23 | MySQL是怎么保证数据不丢的?
  16. Hyper-V应用指南之5-导出、导入虚拟机
  17. 基于TensorFlow的车牌识别系统 (附代码)
  18. DockerFile的编写构建镜像步骤,常用命令和案例
  19. PCB屏蔽罩图纸制作
  20. Typora设置图片上传服务

热门文章

  1. 重学深度学习系列-回归
  2. 爬虫笔记:爬虫的基本原理
  3. VTK:直线用法实战
  4. wxWidgets:wxStopWatch类用法
  5. wxWidgets:wxDC类用法
  6. boost::system::is_error_code_enum相关的测试程序
  7. boost::signals2::signal_type相关的测试程序
  8. boost::program_options模块实现使用命令行和配置文件的测试程序
  9. boost::multi_array模块实现index_base 修改工具的测试
  10. boost::generator_iterator用法的测试程序