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

来源:互联网 发布:逆战天梯卡数据不扣分 编辑:程序博客网 时间:2024/05/28 15:07

数据库连接池的代码示例


      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();        }    }}
原创粉丝点击