数据库连接池 C3P0 (简化数据库连接代码)

本文介绍JDBC开发流程及使用C3P0数据库连接池优化数据库连接管理的方法,包括C3P0配置与Java程序的简化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC开发流程

  • 加载驱动(只需要加载一次)
  • 建立数据连接(Connection)
  • 执行SQL语句(Statement)
  • ResultSet接收结果集(查询)
  • 断开连接,释放资源

使用JDBC的弊端: 数据库连接对象通过DriverManager 来获取的,每次获取都需要向数据库申请获取连接,验证用户名和密码。执行完SQL语句后断开连接,这样的方式会造成资源的浪费,数据连接资源没有得到很好的重复利用,可以通过数据库连接池来解决这一问题。

数据库连接池的基本思想就是为数据库建立一个缓冲池,预先向缓冲池中放入一定数量的连接对象,当需要获取数据库连接的时候,只需要从缓冲池中取出一个对象,用完之后再放回缓冲池中,供下一次请求使用,做到了资源的重复利用,允许程序重复使用一个现有的数据库连接对象,而不需要重新创建。
当数据库连接池中没有空闲的连接时,新的请求就会进入等待队列,等待其他线程释放连接。

数据库连接池实现

JDBC的数据库连接池使用javax.sql.DataSource接口来完成的,DataSource是Java官方提供的接口,使用的时候开发者并不需要自己来实现该接口,可以使用第三方的工具,C3P0是一个常用的第三方工具,实际开发中直接使用C3P0即可完成数据库连接池的操作。

1、导入jar包
在这里插入图片描述

2、代码实现

package com.Chase.test;
import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.beans.PropertyVetoException;
import java.sql.*;
public class test {
    public static void main(String[] args) {

        try {
        	//创建C3P0
            ComboPooledDataSource dataSource= new ComboPooledDataSource();
            //加载驱动
            dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
            //获取连接,此处包含SSL和时区设置
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC");
            dataSource.setUser("root");
            dataSource.setPassword("1234567");
            Connection connection = dataSource.getConnection();
            System.out.println(connection);//打印出连接对象
            connection.close();//还回数据库连接池中
        } catch (SQLException e)
        {
            e.printStackTrace();
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }
}

实际开发,将C3P0的配置信息定义再XML中,java程序只需要加载配置文件即可完成数据池的初始化操作。

开发时的简化操作(C3P0)
  • 配置文件的名字必须是c3p0-config.xml
  • 初始化CombopooledDataSource时,传入参数必须是c3p0-config.xml中named-config标签的name属性值

c3p0-config.xml

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

	<named-config name="test">
		
		<!-- 指定连接数据源的基本属性 -->
		<property name="user">root</property>
		<property name="password">1234567</property>
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/mytest?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=UTC</property>
		
		<!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
		<property name="acquireIncrement">5</property>
		<!-- 初始化数据库连接池时连接的数量 -->
		<property name="initialPoolSize">5</property>
		<!-- 数据库连接池中的最小的数据库连接数 -->
		<property name="minPoolSize">5</property>
		<!-- 数据库连接池中的最大的数据库连接数 -->
		<property name="maxPoolSize">10</property>
	
	</named-config>
		
</c3p0-config>

java程序

package com.Chase.test;
import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.*;
public class test {
    public static void main(String[] args) {
        Connection connection=null;
        try {
        	//c3p0创建
            ComboPooledDataSource dataSource= new ComboPooledDataSource("test");//参数默认为c3p0-config配置中name-config名称
            connection = dataSource.getConnection();
            System.out.println(connection);//打印出连接对象
        } catch (SQLException e)
        {
            e.printStackTrace();
        }finally {
            try {
                connection.close();//还回对象
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
本文素材来源于网上视频 + 手动操作,仅用于个人记录,如有侵权,请联系删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值