【JDBC】C3P0连接池

C3P0连接池

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

创建项目 导入 jar包

在这里插入图片描述

导入配置文件 c3p0-config.xml

  • 注意:c3p0-config.xml 文件名不可更改
  • 直接放到src下,也可以放到到资源文件夹中
<c3p0-config>
	<!--默认配置-->
	<default-config>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/db?characterEncoding=UTF-8</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<!-- initialPoolSize:初始化时获取三个连接,
		取值应在minPoolSize与maxPoolSize之间。 -->
		<property name="initialPoolSize">3</property>
		
		<!-- maxIdleTime:最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。-->
		<property name="maxIdleTime">60</property>
		
		<!-- maxPoolSize:连接池中保留的最大连接数 -->
		<property name="maxPoolSize">100</property>
		<!-- minPoolSize: 连接池中保留的最小连接数 -->
		<property name="minPoolSize">10</property>
		
	</default-config>
	
	<!--配置连接池mysql-->
	
	<named-config name="mysql">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/db5</property>
		<property name="user">root</property>
		<property name="password">123456</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
	</named-config>
	<!--配置连接池2,可以配置多个-->

</c3p0-config>

常见配置项

分类 属性 描述
必须项 user 用户名
必须项 password 密码
必须项 driverClass 驱动
必须项 jdbcUrl 路径
基本配置 initialPoolSize 连接池初始化时创建的连接数。
默认值:3
基本配置 maxIdleTime 连接池中拥有的最大连接数。
默认值:15.
基本配置 maxPoolSize 连接池保持的最小连接数。
10.
基本配置 minPoolSize 连接的最大空闲时间。
如果超过这个时间,某个数据库连接还没有被使用,则会断开掉这个连接,
如果为0,则永远不会断开连接。
默认值:0.

1. 编写工具类

C3P0提供的核心工具类, ComboPooledDataSource , 如果想使用连接池,就必须创建该类的对象
new ComboPooledDataSource(); 使用 默认配置
new ComboPooledDataSource(“mysql”); 使用命名配置

1.1 工具类实例:

package com.cyh.utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class C3P0Utils {
    
    
    //1. 创建连接池对象 C3P0对DataSource接口的实现类
    /**
     * 使用的配置是配置文件中的群认配置
     */
    /*public static ComboPooledDataSource dataSource = new ComboPooledDataSource();*/

    /**
     * 使用指定的配置
     */
    public static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");

    /**
     * 获取连接的方法
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
    
    
        return dataSource.getConnection();
    }
    /**
     * 释放资源方法
     * @param con
     * @param statement
     */
    public static void close(Connection con, Statement statement){
    
    
        if(con != null && statement != null){
    
    
            try {
    
    
                statement.close();
                //归还连接
                con.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
    }

    /**
     * 释放资源方法
     * @param con
     * @param statement
     * @param resultSet
     */
    public static void close(Connection con, Statement statement, ResultSet resultSet){
    
    
        if(con != null && statement != null && resultSet != null){
    
    
            try {
    
    
                resultSet.close();
                statement.close();
                //归还连接
                con.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}

测试:
实例:查询姓名为 李白的员工信息

package com.cyh.testpool;

import com.cyh.utils.C3P0Utils;

import java.sql.*;

public class TestC3P0 {
    
    
    // 查询姓名为 李白的员工信息
    public static void main(String[] args) throws SQLException {
    
    
        //1. 获取连接
        Connection con = C3P0Utils.getConnection();

        //2. 获取预处理对象
        String sql = "select * from employee where ename = ?";
        PreparedStatement preparedStatement = con.prepareStatement(sql);

        //3. 设置占位符的值
        preparedStatement.setString(1,"李白");
        ResultSet resultSet = preparedStatement.executeQuery();

        //4. 处理结果集
        while (resultSet.next()){
    
    
            int eid = resultSet.getInt("eid");
            String ename = resultSet.getString("ename");
            int age = resultSet.getInt("age");
            String sex = resultSet.getString("sex");
            double salary = resultSet.getDouble("salary");
            Date date = resultSet.getDate("empdate");
            System.out.println(eid +" " + ename + " " + age +" " + sex +" " + salary +" "
                    +date);
        }
        //5.释放资源
        C3P0Utils.close(con,preparedStatement,resultSet);

    }
}

猜你喜欢

转载自blog.csdn.net/Guai_Ka/article/details/113750569
今日推荐