JavaEE-1-连接池:DBCP&C3P0

前情提要(即关于如何手动创建自己的连接池):

连接池就是一个集合,里面实现存放了n个和数据库的连接,哪个java程序需要与数据库建立连接,直接从这个集合中取就行了。省去了麻烦的建立连接的过程。
在JDBCUtils中的静态代码块中,我们要先生成多个Connection连接,然后存入ArrayList中。


图示

图示2

然后这里写一个静态方法就可以从JDBC连接池中快速获取Connection了~~~


图示3

以上只是最最基础的连接池,还需要考虑连接的回收、我们需要创建多少连接池等等问题。
所以有大量的第三方公司提供了连接池给我们开发者使用

1、带有配置文件的DBCP的使用

我们自己创建一个DBCPUtils.class的工具类用于从连接池获取连接

DBCP可以直接读取配置文件,使用BasicDataSourceFactory生成(方法名为createDataSource(new FileInputStream("xxx.properties")))BasicDataSource(即我们的连接池)。
我们在静态代码中这么写:

DataSource ds=null;  //这个就是连接池
static{
    Properties ps=new Properties();    
    //这里的dbcp.properties自己写好,放在包的根目录下面,这个路径
    //ps.load(new FileInputStream("dbcp.properties")); 但是一般使用类加载器来加载这个配置文件
    ps.load(DBCPUtils.class.getClassLoader()   //获取类加载器
                           .getResourceAsStream("dbcpconfig.properties")); //这里是把资源变成流,在src文件夹下面去找这个资源
    ds = BasicDataSourceFactory.createDataSource(ps);  //解析配置文件,直接创建连接池
}

然后可以用静态方法自动获取连接:

public static Connection getConnection() throws SQLException {
        //这个bdSource一开始是空的,如果没有对它初始化,这里调用getConnection()是得不到连接的
        return bdSource.getConnection();
    }

接着我们就可以写一个JDBC的工具类来执行基础的增删查改操作了。


1、基础

可以认为比DBCP好,开源免费
项目添加jar依赖:


添加依赖项
  • 第二个是jdk1.3版本之前使用的jar包
  • 第三个文件是用于Oracle数据库的连接池
  • 第四个文件是c3p0的依赖jar包

在C3P0连接池中遵循了javax.sql.DataSource接口的实现类:ComboPooledDataSource

public class C3P0Utils {
    
    private static ComboPooledDataSource ds = new ComboPooledDataSource();
    
    public static Connection getConnection() throws SQLException{
        //不用自己去DriverManager获取,而是从C3P0连接池获取
        return ds.getConnection();
    }
}

与前一个DBCP连接池的配置一样,此时我们的连接池并没有初始化
我们可以在static代码块中初始化连接池:


初始化连接池

上面这里的红色下划线是异常,try/catch即可。

然后在主类中使用C3P0Utils.getConnection()即可获取到我们想要的Connection对象。

2、使用配置文件设置C3P0连接池初始信息

  • 配置文件分XML和properties两种,C3P0用的是XML文件配置
xml配置文件示例

字如其名,很容易理解~

配置文件设置完之后,可以把之前写在static中的数据库连接初始化代码给删去了,但是这里要注意,配置文件必须命名为“c3p0-config.xml”

命名

注意demo03包中的C3P0Utils02.java中的
private static ComboPooledDataSource ds = new ComboPooledDataSource();
这个对象会自动加载这个配置文件,这个和DBCP是不同的,DBCP需要自己手动加载

接下来就可以直接在main方法中使用getConnection()方法了。

3、测试C3P0连接池

测试C3P0连接池

这些方法具体怎么写见《JavaEE-0-JDBC数据库连接》。

  • 从连接池中拿到的Connection conn,我们使用结束之后对其进行conn.close()的操作,这个连接不是被关闭了,而是返回到了连接池中去(这里用到的原理是 JAVA中的代理模式)

4、使用C3P0配置文件中的非默认配置

xml配置文件示例

如图中所示,在配置文件中写的是,即默认配置
我们在C3P0Utils.java中写的private static ComboPooledDataSource ds = new ComboPooledDataSource();这个的构造函数是空参数的,但是这个new ComboPooledDataSource()还有一个重载方法,是可以加载在这个配置文件中的其他配置的。
我们先对配置文件进行添加新的配置格式:
新的配置

如图,在中间位置再加上自己的配置信息,然后对C3P0Utils进行修改:
private static ComboPooledDataSource ds = new ComboPooledDataSource("abcd");

你可能感兴趣的:(JavaEE-1-连接池:DBCP&C3P0)