c3p0连接池的用法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 使用DButils进行连接并对数据库进行操作

c3p0连接池的用法

1、导入c3p0jar包

c3p0-0.9.1.2.jar

2、xml配置文件

在src的目录下, 创建一个名称为 c3p0-config.xml的配置文件, 配置信息如下:

1)最基本配置*四个连接数据库必须的参数)

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://106.13.43.205:3306/test</property>
        <property name="user">root</property>
        <property name="password">aaaaa123</property>
    </default-config> 
</c3p0-config> 

2)复杂的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>  
        <property name="driverClass">com.mysql.jdbc.Driver</property>  
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>  
        <property name="user">root</property>  
        <property name="password">123456</property>  
             <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:3 -->  
        <property name="acquireIncrement">5</property>  
             <!--初始化的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3-->  
        <property name="initialPoolSize">10</property>  
             <!--连接池中保留的最小连接数-->  
        <property name="minPoolSize">5</property>  
             <!--连接池中保留的最大连接数。Default:15 -->  
        <property name="maxPoolSize">20</property>  
             <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->  
        <property name="acquireRetryAttempts">30</property>  
             <!--两次连接中间隔时间,单位毫秒。Default: 1000 -->  
        <property name="acquireRetryDelay">1000</property>  
             <!--连接关闭时默认将所有未提交的操作回滚。Default: false -->  
         <property name="autoCommitOnClose">false</property>  
    </default-config> 
</c3p0-config>

3、创建数据源DataSourceUtils(工具类)

package com.canghe.utils;

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

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceUtils {

    private static DataSource dataSource = new ComboPooledDataSource();

    private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();

    // 直接可以获取一个连接池
    public static DataSource getDataSource() {
        return dataSource;
    }

    // 获取连接对象
    public static Connection getConnection() throws SQLException {

        Connection con = tl.get();
        if (con == null) {
            con = dataSource.getConnection();
            tl.set(con);
        }
        return con;
    }

    // 开启事务
    public static void startTransaction() throws SQLException {
        Connection con = getConnection();
        if (con != null) {
            con.setAutoCommit(false);
        }
    }

    // 事务回滚
    public static void rollback() throws SQLException {
        Connection con = getConnection();
        if (con != null) {
            con.rollback();
        }
    }

    // 提交并且 关闭资源及从ThreadLocall中释放
    public static void commitAndRelease() throws SQLException {
        Connection con = getConnection();
        if (con != null) {
            con.commit(); // 事务提交
            con.close();// 关闭资源
            tl.remove();// 从线程绑定中移除
        }
    }

    // 关闭资源方法
    public static void closeConnection() throws SQLException {
        Connection con = getConnection();
        if (con != null) {
            con.close();
        }
    }

    public static void closeStatement(Statement st) throws SQLException {
        if (st != null) {
            st.close();
        }
    }

    public static void closeResultSet(ResultSet rs) throws SQLException {
        if (rs != null) {
            rs.close();
        }
    }

}

4、使用DButils进行连接并对数据库进行操作

QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from product";
        List<Product> productList = null;
        try {
            productList = runner.query(sql, new BeanListHandler<Product>(Product.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
25天前
|
存储 SQL 数据库连接
连接池的工作原理
初始化连接池:在应用程序启动时,连接池会创建一组数据库连接,并将这些连接存储在一个容器(通常是一个集合或队列)中。 获取连接:当应用程序需要与数据库交互时,从连接池中获取一个空闲的连接。如果连接池中没有可用连接,应用程序可以选择等待或创建新的连接(如果连接池允许)。 使用连接:应用程序使用获取到的连接执行SQL操作。 归还连接:操作完成后,将连接归还到连接池,以便其他请求可以重用该连接。 维护连接池:连接池需要定期检查和维护连接的状态,例如清理长时间未使用的连接、验证连接的有效性等。
23 1
|
1月前
|
XML Java 数据库连接
如何使用HikariCP连接池来优化数据库连接管理
在Java应用中,高效管理数据库连接是提升性能的关键。本文介绍了如何使用HikariCP连接池来优化数据库连接管理。通过引入依赖、配置参数和获取连接,你可以显著提高系统的响应速度和吞吐量。 示例代码展示了从配置到使用的完整流程,帮助你轻松上手。
267 3
|
SQL Java 数据库连接
自定义HikariCP连接池
自定义HikariCP连接池
548 0
|
7月前
|
数据库连接 数据库
连接池的扩展和定制
连接池的扩展和定制
|
7月前
|
监控 Java 数据库连接
数据库访问: 解释一下连接池的概念。
数据库访问: 解释一下连接池的概念。
101 1
|
SQL 缓存 关系型数据库
连接池设置
连接池设置
115 0
|
关系型数据库 MySQL Java
MySQL数据库连接池的原理和使用方法
MySQL数据库连接池的原理和使用方法
|
设计模式 SQL druid
jdbcs之连接池和框架
jdbcs之连接池和框架
162 0
jdbcs之连接池和框架
|
Java 关系型数据库 MySQL
c3p0 连接池的基本使用方式| 学习笔记
快速学习 c3p0 连接池的基本使用方式.
137 0
c3p0 连接池的基本使用方式| 学习笔记
|
Java 数据库连接 API
自定义数据库连接池
自定义数据库连接池
114 0
自定义数据库连接池