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包

c3p0的配置及简单应用

 

这里以IDEA为例

c3p0的配置及简单应用

 

 

 

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

  在src下新建c3p0_config.xml文件

c3p0的配置及简单应用

 

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

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置,如果没有指定则使用这个配置 -->
    <default-config>
  //以下是数据库用户名、密码、被操作的数据表名地址、驱动类 <property name="user">root</property> <property name="password">root</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/users</property> <property name="driverClass">com.mysql.jdbc.Driver</property>   //最大连接数、最小连接数、一次增长个数、初始可连接数 <property name="maxPoolSize">100</property> <property name="minPoolSize">2</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">3</property>   //最大等待连接时间、空闲连接测试个数、最大空闲时间、最大预缓存数   <property name="checkoutTimeout">30000</property> <property name="idleConnectionTestPeriod">30</property> <property name="maxIdleTime">30</property> <property name="maxStatements">200</property> </default-config> <!-- 命名的配置,可以通过方法调用实现 --> <named-config name="Mysql"> <property name="user">root</property> <property name="password">root</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/users?useUnicode=true&amp;characterEncodeing=utf8&amp;useSSL=true</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <!-- 如果池中数据连接不够时一次增长多少个 --> <property name="acquireIncrement">5</property> <!-- 初始化数据库连接池时连接的数量 --> <property name="initialPoolSize">20</property> <!-- 数据库连接池中的最大的数据库连接数 --> <property name="maxPoolSize">25</property> <!-- 数据库连接池中的最小的数据库连接数 --> <property name="minPoolSize">5</property> </named-config> </c3p0-config>

 

编写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);
        }
    }
}

 

 

 

 

c3p0的配置及简单应用

上一篇:docker数据迁移


下一篇:EF Core使用