c3p0的配置及简单应用


首先简单了解一下JDBC和c3p0

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。

在JDBC项目中,如果需要多个连接,如果一直获取连接再断开连接,会造成资源的极大浪费和占用。而在c3p0项目中,c3p0它有一个数据库池是用来管理客户端和数据库连接(Connection),有了这个池我们就不用自己来创建Connection,也不用担心频繁的连接断开操作造成的系统资源浪费很大,通过池来获取Connection对象,当使用完后,进行的资源释放c3po_utils.release(rs,conn,pstm)并不是直接把进程直接关掉,而是把从连接池占用的资源又还回去给池。

配置c3p0

首先

  下载官网c3p0:https://sourceforge.net/projects/c3p0/

  打开下载好的c3p0文件夹下的lib目录,可以看到c3p0-0.9.5.5.jar和mchange-commons-java-0.2.19.jar两个jar包

这里以IDEA为例

第二步,成功导入包后,我们配置一下c3p0的配置文件,c3p0不在properties文件中配置,而是在xml中配置

  在src下新建c3p0_config.xml文件

在新建好的c3p0_config.xml中加入配置

<?xml version="1.0" encoding="UTF-8"?>

    
    <default-config>
  //以下是数据库用户名、密码、被操作的数据表名地址、驱动类 root root jdbc:mysql://localhost:3306/users com.mysql.jdbc.Driver   //最大连接数、最小连接数、一次增长个数、初始可连接数 100 2 5 3   //最大等待连接时间、空闲连接测试个数、最大空闲时间、最大预缓存数   30000 30 30 200 default-config> root root jdbc:mysql://localhost:3306/users?useUnicode=true&characterEncodeing=utf8&useSSL=true com.mysql.jdbc.Driver 5 20 25 5

编写c3p0工具类utils

package com.lsq.Utils_Study.Utils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class c3p0_Utils { public static DataSource dataSource = null; static { try { //创建数据源工厂模式 dataSource = new ComboPooledDataSource("Mysql");//配置文件写法 }catch (Exception e){ e.printStackTrace(); } } //获取连接 public static Connection getConnection() throws SQLException{ return dataSource.getConnection();//从数据源中获取连接 } //释放系统资源 public static void release(ResultSet rs, Connection conn, PreparedStatement pstm){ if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstm!=null){ try { pstm.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

 测试c3p0连接是否成功

package com.lsq;

import com.lsq.Utils_Study.Utils.c3p0_Utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class c3p0_test {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;

        try {
            conn = c3p0_Utils.getConnection();
            String sql = "select * from users where id=?";
            pstm = conn.prepareStatement(sql);
            pstm.setInt(1,1);
            rs = pstm.executeQuery();
            if (rs.next()){
                System.out.println("查询成功");
                System.out.println(rs.getString("NAME"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            c3p0_Utils.release(rs,conn,pstm);
        }
    }
}