C3PO数据库连接池

2023-11-10

一、数据库连接池原理

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。

使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。

同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

二、C3PO数据库连接池

所需jar文件:

1)c3p0-0.9.2-pre1.jar

2)mchange-commons-0.2.jar

3)mysql-connector-java-5.1.7-bin.jar

首页,下载以上jar包,放到项目的lib目录下,并build path

其次,编写c3po-config.xml配置文件

内容如下:

<?xml version ="1.0" encoding="UTF-8"?>
<c3p0-config>
    <named-config name="c3p0">
    <!-- 指定数据库连接源的基本属性 -->
    <!--MySQL数据库驱动程序-->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <!--MySQL数据库地址-->
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8</property>
    <!--MySQL数据库用户名-->
    <property name="user">root</property>
    <!--MySQL数据库密码-->
    <property name="password"></property>
    <!-- 若数据库连接数不足时,一次向数据库服务器申请多少个连接 -->
    <property name="acquireIncrement">5</property>
    <!-- 初始化数据库连接池时的连接数量 -->
    <property name="initialPoolSize">10</property>
    <!-- 数据库连接池中的最小连接数量 -->
    <property name="minPoolSize">10</property>
    <!-- 数据库连接池中的最大连接数量 -->
    <property name="maxPoolSize">50</property>

    <!-- C3P0数据库连接池可以维护的statement的个数 -->
    <property name="maxStatements">50</property>
    <!-- 每个连接可以同时使用的statement对象的个数 -->
    <property name="maxStatementsPerConnection">10</property>
    </named-config>
</c3p0-config>

接着,在src下的工具类包(一般包名是xx.xxx.utils)里面创建一个DBUtil.java文件,内容如下:

package com.poster.dby.utils;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.PreparedStatement;
import java.sql.Connection;

public class DBUtil {
    private static ComboPooledDataSource comboPooledDataSource = null;
        //静态代码块
        static{
            /*
             * 读取c3p0的xml配置文件创建数据源,c3p0的xml配置文件c3p0-config.xml必须放在src目录下
             * 使用c3p0的命名配置读取数据源
             */
            comboPooledDataSource = new ComboPooledDataSource("c3p0");
        }
        //从数据源中获取数据库的连接
        public static Connection getConnection() throws SQLException {
                return comboPooledDataSource.getConnection();
        }
        //释放资源,将数据库连接还给数据库连接池
        public static void closeDB(Connection conn,PreparedStatement ps,ResultSet rs) {
                try {
                    if (rs!=null) {
                        rs.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally{
                    try {
                        if (ps!=null) {
                            ps.close();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally{
                        try {
                            if (conn!=null) {
                                conn.close();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
        }
        //释放资源,将数据库连接还给数据库连接池
        public static void closeDB(PreparedStatement ps,Connection conn) {
             try {
                if (ps!=null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally{
                try {
                    if (conn!=null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
}

最后,在操作数据库的时候,使用

Connection conn = DBUtil.getConnection();

即可获取连接。

最后的最后,不要忘记关闭数据库哦

//用来回收连接,适用于删改查
DBUtil.closeDB(rs,ps,conn);

//用来回收连接,适用于增
DBUtil.closeDB(ps,conn);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C3PO数据库连接池 的相关文章

  • Composer 用于下载私有 GitHub 存储库

    我无法使用 Composer 下载 github 私人存储库 php composer phar update 我收到以下错误 The https api github com repos company private1 https ap
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • 连接到 OpenShift (Redhat Paas) mysql 实例

    我正在尝试将我的 C 应用程序与 openshift 数据库连接 但我得到了这个例外conn Open Eccezione gt MySql Data MySqlClient MySqlException 0x80004005 Unable
  • ssh:连接到主机 bitbucket.org 端口 22:连接超时致命

    整个错误是 ssh connect to host bitbucket org port 22 Connection timed out fatal The remote end hung up unexpectedly 当我从位于不同服务
  • 尝试克隆一个 git 存储库,但它卡在克隆到中

    我使用的是 Windows 10版本 10 0 19042 内部版本 19042 GIT Ver 2 32当尝试使用 git bash 执行以下命令时git clone depth 1 b carla https github com Ca
  • Xcode - 使用 SSH 身份验证添加存储库时出现身份验证失败错误

    我正在尝试通过 Xcode gt 设置 gt 帐户添加存储库 但我被困在正确的地址上 我们的存储库地址非常简单 my domain com port project name 通过 SSH 密钥进行身份验证 有人可以帮助我了解这里发生了什么
  • Ruby,通过 SSH 和 LOG 逐一运行 linux 命令

    我想用 Ruby 女巫 net ssh 编写代码 在远程 Linux 机器上一一运行命令并记录所有内容 在 Linux 机器上称为命令 stdout 和 stderr 所以我写函数 def rs ssh cmds cmds each do
  • ssh:连接到主机 bitbucket.org 端口 22:连接超时

    一切都工作得很好 做了一些git pushes 没有问题 今天我决定将我的框架更新到最新版本 因此它稍微改变了我项目的目录结构 因此 在 Bitbucket 中 我创建了一个新的存储库 dev1 project com 并将我的项目文件夹重
  • Ansible bitbucket 克隆配置 ssh 错误

    总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 主机密钥验证失败 然而 如果我流浪 ssh 然后运行 克隆 命令 私有存
  • 无法连接到 Azure Ubuntu VM - 公钥被拒绝

    我们在 Azure 上使用 Ubuntu VM 一段时间了 很少遇到任何问题 然而 其中一台虚拟机最近出现了问题 出乎意料的是 Ubuntu VM 开始拒绝公钥 ssh i azure key email protected cdn cgi
  • 通过 ssh 运行 Bash 脚本

    我正在尝试编写一个 Bash 脚本 它将通过 SSH 连接到计算机并创建一个目录 长期目标有点复杂 但现在我从简单的开始 然而 虽然很简单 但我似乎不太明白 这是我的代码 bin bash ssh T email protected cdn
  • 处理 sshj 中的“[HOST_KEY_NOT_VERIFIABLE] 无法使用指纹验证 `ssh-rsa` 主机密钥”

    我在 sshj 方面遇到了一个奇怪的问题 我正在使用 sshj v0 6 0 我需要某人的帮助 使用公钥进行身份验证在某些计算机上可以正常工作 但在其他计算机上则不能正常工作 并且我看到以下错误 我能看出的唯一区别是 有问题的 UNIX I
  • 使用 pscp 命令时出现“未找到命令”

    我正在使用 PuTTY pscp 将项目文件夹传输到 AWS 实例 我可以使用 ppk 公钥文件进行连接并且ssh命令成功打开并登录 这里我使用命令来传输文件夹 pscp r i C path to my keys converted pe
  • GridGain - 通过 Grid.startNodes API 使用 SSH 以编程方式打开节点

    我正在使用 Grid startNodes java util Collection java util Map boolean int int 如此处定义 http gridgain com api javadoc org gridgai
  • 如何通过 SSH 启动进程,使其保持运行?

    我有三个文件 Monitor sh 它启动 python 脚本 sudo python webCheck sudo python apiCheck 以及其他的 webCheck 和 apiCheck 它应该在我关闭终端后在后台运行 它无限循
  • SSH:连接被远程服务器关闭

    我正在尝试 ssh 登录我的远程服务器 但每当我尝试使用 ssh 命令通过终端登录时 ssh root ip address 我收到错误 Connection closed by ip address 我检查了主机拒绝和主机允许 文件中没有
  • 使用knife ec2插件在VPC私有子网中创建虚拟机

    尽管我已经写了相当多的 Chef 文章 但我对 AWS VPC 和管理网络流量 尤其是堡垒主机 还相当陌生 使用 Knife ec2 插件 我希望能够从我的开发人员工作站动态创建和引导虚拟机 VM 应能够存在于我的 VPC 的公有子网或私有
  • 是否可以让 Capistrano 通过反向 SSH 隧道进行结帐?

    我正在开发一个驻留在公共主机上的应用程序 但我必须将其源代码保存在公司防火墙后面的 Git 存储库中 我越来越very厌倦了通过缓慢的部署scp 复制整个存储库并在每次部署时通过 SSH 传送 并且希望远程主机只需执行git pull更新
  • SSH IdentitiesOnly=yes 转发我的所有密钥

    我一生都无法弄清楚为什么我的 SSH 配置转发了错误的密钥 我有两把钥匙 我们会打电话给他们home rsa and work rsa 我做了以下事情 eval ssh agent ssh add K ssh home rsa ssh ad
  • gitlab 上的权限被拒绝(公钥)

    我的问题是我无法从 GitLab 推送或获取 不过 我可以克隆 通过 HTTP 或通过 SSH 当我尝试推送时出现此错误 权限被拒绝 公钥 致命 无法从远程存储库读取 从我看过的所有线程中 这是我所做的 在我的计算机上设置 SSH 密钥并将

随机推荐

  • Spring简述

    Sping是什么 Spring主要模块 IOC DI依赖注入的三种方式 AOP 术语 Sping是什么 Spring是一个轻量级的开源框架 主要作用是为了简化开发 它以IOC 控制反转 和AOP 面向切面编程 为内核 Spring主要模块
  • 计算机辅助教学考博,2018年华中科技大学3319计算机辅助设计与制造考博大纲

    资源大小 0 1 10 0 MB 资源类型 rar 发布时间 2020 5 14 23 35 45 资源评分 资源简介 2018年华中科技大学3319计算机辅助设计与制造考博大纲 下载流程 考研真题 点击 考研试卷 下载 考博真题 点击 考
  • 物理机ubuntu系统--远程控制-不接显示器-使用虚拟显示器-设置分辨率1920*1080

    liunx系统与intel显卡驱动不兼容的机制问题 导致有些机器无法在没有显示器的情况下 不能进行远程 向日葵和TeamViewer都不行 因此使用虚拟显示器的软件Xorg 反正网上很多资料 本文只是添加图片 更加详细的过程 以及遇到的情况
  • STM32开发笔记02---新建库函数工程

    架构图 创建工程 首先我们先创建一个资料夹example 路径最好配置为全英文 然后分别在example资料夹内再创建6个资料夹 分别是 Doc Libraries Listing Output Project User 然后开启keil
  • Ethereum账户私钥管理之导出、导出keystore 文件

    目录 前言 一 理解keystore文件的导出 导入 二 导出keystore文件 三 导入keystore文件 并还原成为私钥
  • 软件体系结构实验报告-比较不同的软件架构风格

    报告内容 调试分析KWIC 理解不同架构风格 1 画出每一种风格对应程序的静态结构图 如类图 2 打印出程序的执行过程 3 使用一个较大的输入文本 测试每一种风格程序的性能 4 结合程序 总结每一种架构风格的特点 一 画出每一种风格对应程序
  • JS中将数组作为值添加到对象中

    1 条件 已有对象 myobject key1 value1 key2 value2 key3 value3 已有数组 myarray 1 2 3 4 5 6 2 需求 myobject key1 value1 key2 value2 ke
  • Windows删除Maven本地资源库中lastUpdate和repositories文件的脚本

    一 脚本 1 删除 lastUpdated的文件的脚本 1 在桌面新建txt文档 将后缀改为 bat 文件名称随意 2 添加内容如下 echo off set REPOSITORY PATH C softwore apache maven
  • 02.02.19

    做一件事开始觉得痛苦 别怕继续做下去 因为你已经进入到一个新的阶段 你在融入 因为这种痛苦是付出过的人才体会的到的 开始变得轻松但发现自己更渺小又是一个阶段 你已经融入了 继续的就是坚持 保持一颗 幼稚 上进 的心 走到最后 转载于 htt
  • VUE 实现两个select联动效果

    两个下拉框 当选择A的时候B会跟着联动 template代码
  • docker安装ros的一点记录

    docker本没有图形化界面 但是ros很多时候都要用到rviz来看数据 比较烦人的一件事情 ros的镜像本身的图形化显示本身给人一种没有做完的感觉 需要再做些事情才能正确显示 首先 ros的rviz显示需要opengl的正确支持 而ope
  • mysql [42000][1071] Specified key was too long; max key length is 767 bytes

    今天在MySQL中建立表的时候 报了一个错误 说是key太长了 超戳了767个字节 但是建表语句并有超过指定的长度啊 CREATE TABLE XXL JOB QRTZ JOB DETAILS SCHED NAME VARCHAR 120
  • (二)Ubuntu系统Pytorch环境配置

    1 前言 2 安装miniconda 3 安装Pytorch 4 安装CUDA和cuDNN 5 验证 环境配置系列 一 Ubuntu安装详细教程 从镜像制作到NVIDIA驱动安装全流程 超详细的图文教程 二 Ubuntu系统Pytorch环
  • 图解算法使用python吴灿铭 pdf_图解算法

    像小说一样有趣的算法入门书 算法是解决问题的一步步流程 也是计算机科学领域的核心主题 如今程序员 常用的算法已经经过了前人的探索 检验及证明 如果你想搞明白这些算法 又不想被困在繁琐的证明中 本书正是你的不二选择 这本图示丰富 引人入胜的实
  • 【数据结构】零基础树状数组笔记

    参考和引用 树状数组学习笔记 树状数组 数据结构详解与模板 可能是最详细的了 树状数组 简单介绍 树状数组小结 AcWing 241 楼兰图腾 的题解 树状数组求逆序对模板 转 树状数组逆序对 树状数组的作用 树状数组 也叫做二叉索引树 或
  • CMake 入门与进阶

    目录 cmake简介 cmake的下载 cmake 的使用方法 示例一 单个源文件 cmake生成的中间文件以及可执行文件都放在build目录下 示例二 多个源文件 示例三 生成库文件 动态库和静态库 修改库文件名字 最低版本要求 示例四
  • Set接口介绍

    文章目录 前言 一 Set接口 1 Set接口特点 2 Set的实现类 Set接口提供的方法API 二 HashSet 1 HashSet的特点 2 HashSet的属性 3 HashSet的构造函数 4 HashSet方法 三 Linke
  • java中的循环

    java中的循环有四种 循环由四部分组成 1 初始部分 循环判断的变量 2 循环条件 布尔表达式 3 循环操作 循环执行的代码 4 迭代部分 更新循环变量 1 while循环 while的特点 首次判断不满足 则一次都不会执行 先判断 再执
  • 渗透测试之指纹识别(CMS、CDN、WAF)

    目录 什么是指纹识别 1 cms指纹识别 2 cdn指纹识别 3 WAF指纹识别 什么是指纹识别 通过关键特征 识别出目标的CMS系统 服务器 开发语言 操作系统 CDN WAF的类别 版本等等 其中主要识别以下的信息 1 CMS信息 比如
  • C3PO数据库连接池

    一 数据库连接池原理 连接池基本的思想是在系统初始化的时候 将数据库连接作为对象存储在内存中 当用户需要访问数据库时 并非建立一个新的连接 而是从连接池中取出一个已建立的空闲连接对象 使用完毕后 用户也并非将连接关闭 而是将连接放回连接池中