数据库连接池的代码实例(DHCP、C3P0)

数据库连接池的代码示例


      1、DHCP数据库连接池,这是apache的一个项目,凡是数据库连接池都要实现javax.sql.DataSource接口,换句话说,实现了这个借口的类就是一个数据库连接池。
      代码如下:

package com.test.dhcp;

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

import org.apache.commons.dbcp.BasicDataSource;

public class JdbcUtils {
    public static void main(String[] args) {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/mysql");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.out.println(conn);
    }
}

      数据库连接池的close()方法的执行效果和mysql提供的实现类的方法有所不同,这里用到了装饰者模式。加强了close()方法,在调用该方法时会把数据库连接归还给连接池。


      2、C3P0数据库连接池
          2.1第一种代码实现方式:

package com.test.dhcp;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class Demo2 {
    public static void main(String[] args) {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        try {
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/cctrace");
            dataSource.setUser("root");
            dataSource.setPassword("123456");
            Connection conn = dataSource.getConnection();
            System.out.println(conn);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

          2.1第二种代码实现方式:

在src路径下创建一个xml文件,文件名为c3p0-config.xml ,必须这么命名。文件内容为:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/cctrace</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">123456</property>
    </default-config>
</c3p0-config>

      这个dataSource的一些个别的属性(最大连接数等自行配置)。
      获取链接部分代码如下:

package com.test.dhcp;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class Demo3 {
    public static void main(String[] args) {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        try {
            Connection conn = dataSource.getConnection();
            System.out.println(conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

      如果配置了多个数据库,那么可以使用命名的方式来获取该连接
xml文件配置路径同上,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/cctrace</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">123456</property>
    </default-config>
    <named-config name="bigData">
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/bigData</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">123456</property>
    </named-config>
</c3p0-config>

获取连接部分的代码如下:

package com.test.dhcp;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class Demo3 {
    public static void main(String[] args) {
        ComboPooledDataSource dataSource = new ComboPooledDataSource("bigData");
        try {
            Connection conn = dataSource.getConnection();
            System.out.println(conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq1437715969/article/details/75947994