Java数据库连接池c3p0和druid

98 阅读3分钟

目录

一、举例解释连接池

二、c3p0

三、druid


一、举例解释连接池

一直用jdbc的我突然发现一个好东西,那就是连接池,举一个不恰当的例子来说说jdbc和连接池的区别

比如有一家餐馆,如果是jdbc的形式去运营该餐馆就是,每当来客人吃饭的时候,就需要去招工人,当客人走的时候,那你又把工人给辞了,也就是每次都需要获取连接,然后又要关闭连接的意思,如果是连接池的形式去运营该餐馆就是,在我刚开业的时候去招一些员工,每当有客人的时候,直接让员工去服务,客人走了,员工休息就行,也就是第一次的时候初始化一个连接数,放在一个池子里,每当用的时候直接去池子里取,用完之后再放回池子。

二、c3p0

在使用c3p0这个连接池的时候需要导入三个jar包,分别是c3p0的jar包、c3p0所依赖的jar包和数据库连接的jdbc包

c3p0的两个jar包官网下载链接sourceforge.net/projects/c3…

连接数据库的jdbc包,这里以mysql为例子,官方链接dev.mysql.com/downloads/c…

 当把这三个jar包都导入之后,接下来就是代码了

首先是需要一个c3p0-config.xml的文件,放在src下,在这里需要注意它是认名字的,别起错名了

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <!--连接参数-->
        <!--driverClass是mysql的数据库驱动-->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!--jdbcUrl是连接数据库的url,其中mydb是自己的数据库名-->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=false</property>
        <!--user是数据库的用户名-->
        <property name="user">root</property>
        <!--password是数据库的密码-->
        <property name="password">root</property>

        <!--连接池参数-->
        <!--initialPoolSize是初始化申请的连接数量,取值应在minPoolSize与maxPoolSize之间 -->
        <property name="initialPoolSize">5</property>
        <!--连接池中最大的连接数 -->
        <property name="maxPoolSize">10</property>
        <!--超时时间,就是连接等待的时间,超过这个时间就认为连接失败-->
        <property name="checkoutTimeout">3000</property>
    </default-config>
    <named-config name="mysql">
        <!--连接参数-->
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=false</property>

        <!--连接池参数-->
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">8</property>
        <property name="checkoutTimeout">3000</property>
    </named-config>
</c3p0-config>

当把这个.xml文件写好后,需要再写一个java类

package com;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * c3p0的演示
 */
public class C3P0Demo {
    public static void main(String[] args) throws SQLException {
        //创建数据库连接池对象,里面没有参数是默认参数,有参数的是我们自定义的
        DataSource ds = new ComboPooledDataSource();
        //DataSource ds = new ComboPooledDataSource("mysql");
        //获取连接对象
        Connection conn = ds.getConnection();
        //打印
        System.out.println(conn);
    }
}

 到此就写完了,运行结果如下:

三、druid

讲完了c3p0再讲这个就简单多了,大致思想是一样的,这个只需导入两个包,druid包和数据库连接的jdbc包

druid下载链接repo1.maven.org/maven2/com/…

jdbc下载链接dev.mysql.com/downloads/c…

当把这两个jar包导入之后,需要一个.properties文件,我这里是druid.properties文件,这个文件最好放在src下

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=root
#初始化连接数
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000

接下来需要写一个java类

package com.druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

public class DruidDemo {
    public static void main(String[] args) throws Exception {
        //加载配置文件
        Properties pro = new Properties();
        InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        //获取连接池对象
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);
        //获取连接
        Connection conn = ds.getConnection();
        System.out.println(conn);
    }
}

运行结构如下: