Java中JDBC的数据库连接池

2023-10-26

数据库连接池

池参数(所有池参数都有默认值)

初始大小:10个

最小空闲连接数:3个

增量:一次创建的最小单位(5个)

最大空闲连接数:12个

最大连接数:20个

最大的等待时间:1000毫秒


四大连接参数

连接池也是使用四大连接参数来完成创建连接对象!


实现的接口

连接池必须实现:javax.sql.DataSource接口!

连接池返回的Connection对象,它的close()方法与众不同!调用它的close()不是关闭,而是把连接归还给池!代表该链接不被占用了。

 

数据库连接池

连接池的概念

池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。


JDBC数据库连接池接口(DataSource)

  Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商可以让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!


自定义连接池(CloudPool)

  分析:CloudPool需要有一个List,用来保存连接对象。在CloudPool的构造器中创建5个连接对象放到List中!当用人调用了CloudPool的getConnection()时,那么就从List拿出一个返回。当List中没有连接可用时,抛出异常。

  我们需要对Connection的close()方法进行增强,所以我们需要自定义CloudConnection类,对Connection进行装饰!即对close()方法进行增强。因为需要在调用close()方法时把连接“归还”给池,所以CloudPool类需要拥有池对象的引用,并且池类还要提供“归还”的方法。


CloudPool.java

public class CloudPool implements DataSource {

    private static Properties props = new Properties();

    private List<Connection> list = new ArrayList<Connection>();

    static {

       InputStream in = CloudPool.class.getClassLoader()

              .getResourceAsStream("dbconfig.properties");

       try {

           props.load(in);

           Class.forName(props.getProperty("driverClassName"));

       } catch (Exception e) {

           throw new RuntimeException(e);

       }

    }

 

    public CloudPool () throws SQLException {

       for (int i = 0; i < 5; i++) {

           Connection con = DriverManager.getConnection(

                  props.getProperty("url"), props.getProperty("username"),

                  props.getProperty("password"));

           CloudPool conWapper = new CloudConnection(con, this);

           list.add(conWapper);

       }

    }

   

    public void

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

Java中JDBC的数据库连接池 的相关文章

随机推荐

  • [586]使用requests来爬取大众点评

    看完本文 你可以 1 了解大众点评的CSS反爬虫机制 2 破解反爬虫机制 3 使用requests即可正确获取到评论数 平均价格 服务 味道 环境数据 评论文本数据 1 前言 在工作生活中 发现越来越多的人对大众点评的数据感兴趣 而大众点评
  • spring 解析swagger.json

    微服务开发 经常会用到swagger 开发过程中也可以直接验证 测试接口是否可用 但是由于swagger不是正式的对接文档 我们提供给前端或者外部来进行联调时还是要正式的文档 为了解决这一痛点 发现swagger是通过swagger jso
  • 软件测试面试HR常问问题及回答技巧,看完丝毫不需要慌,稳过

    前言 当你去一家公司面试 可能会经历好几轮的面试 然后到HR面试 很多公司的HR都有一票否决权 可以直接决定录不录用你 就算你的技术很硬 实例很强 HR不满意还是可以不录用你 尤其对于技术一般的人 HR的这关面试就显得极为重要了 我这个里准
  • memtool使用指南

    最近在用Infineon Memtool 的过程中遇到的一点问题 看了英文help解决了 现总结一下memtool的使用指南 1 target选择change 选择芯片型号 添加配置文件 打开电源 2 对右边的各个rom进行remove a
  • GNU Linux核心命令和工具的源代码路径

    GNU Linux核心命令和工具的源代码路径 2015 08 20 09 44 57 分类 LINUX 原文地址 GNU Linux核心命令和工具的源代码路径 作者 ubuntuer Commands and Utilities The t
  • Linux系统下安装Redis-7.0.0

    一 准备工作 1 下载安装新版的gcc编译器 redis的安装需要gcc环境的支持 所以首先要检查下服务器上时候已经安装了gcc环境 离线安装gcc包 执行安装命令 rpm ivh rpm nodeps force 1 1 下载Redis客
  • 前端面试题(js篇)

    1 解释一下什么是闭包 什么是闭包 函数使用了不属于自己的局部变量 函数套函数 里面函数使用了外面函数定义的变量 闭包的作用 避免全局污染 闭包的缺点 使用过多会造成内存泄漏 占用的内存释放不掉 2 js中的本地存储有哪些 区别是什么 1
  • QT日常报错解决方案

    日常报错 3 1 undefined reference to vtable vtable 表示的是虚表 这个错误出现时 请检查你的父类所有虚函数是否实现 或者子类是否把父类的虚函数都处理完 注意 析构函数也算 有时候一开始没有添加Q OB
  • 专业程序员开发-老狼孩插件懒人精灵版

    老狼孩插件懒人版 综合分类版 v1 7 5有新版啦 完全开放 免费使用 全新改版 1 优化 调试输出默认延迟1000毫秒 2 新增 更新类 阿里云json版热更新 定时关闭界面自动更新 无界面自动更新 3 新增 更新类 坚果云json版热更
  • 服务器太小是什么情况 显示小,服务器内存显示的比实际的小

    服务器内存显示的比实际的小 内容精选 换一换 弹性云服务器创建成功后 使用free m命令查询内存大小 查询结果与实际配置不符 较之创建时的配置要小一些 示例 假设创建该弹性云服务器时 配置的实际内存大小为4194304KB 即4096MB
  • QT之QChart的简介

    QT之QChart的简介 1 创建图表 2 设置图表标题和坐标轴标签 3 定制图表样式 4 显示图表 5 保存图表为图像 QChart 是 Qt Charts 模块中的一个主要类 用于创建和管理图表 QChart 提供了一组用于创建各种类型
  • Vue实现面包屑功能(el-breadcrumb)

    vue3 elementPlus 实现面包屑功能 文章后面附效果图 数据结构 首先展示一下数据基础结构 红色框框是默认存在的数据 其他数据就是通过选中侧边栏菜单进行数据插入 关键数据字段为 path meta 准备侧边栏 首先需要自己准备一
  • 常用对象类型之间的转换

    ads point 是原来的ADS 编程中定义的一种数据类型 其定义为 typedef ads real ads point 3 而ads real 则被定义为 typedef double ads real 可以看出 ads point
  • 前端知识14:webpack打包图片资源

    需要下载url loader 和 file loader两个包 前者依赖于后者 安装 npm i url loader file loader D 图片在css中使用的场景 注意图片在src目录下 注意图片路径的写法用的是相对路径 引用插件
  • C++ vector 容器浅析

    C STL 教程 C STL 教程 C vector 容器浅析 C vector 容器浅析 个人理解 vector就是一个模板类 具有元素多少可以变化的优点 一般为了根据数据类型 会选择显式实例化 下为一个利用vector模板 将一维数组转
  • 【华为OD统一考试B卷

    题目描述 一群大雁往南飞 给定一个字符串记录地面上的游客听到的大雁叫声 请给出叫声最少由几只大雁发出 具体的 1 大雁发出的完整叫声为 quack 因为有多只大雁同一时间嘎嘎作响 所以字符串中可能会混合多个 quack 2 大雁会依次完整发
  • blender 线框效果/Line Art

    Blender 2 93 新功能 Line Art 效果 哔哩哔哩 bilibilihttps www bilibili com video BV19Z4y1w7mk from search seid 1496511710922071136
  • 在Linux系统如何修改profile文件后立即生效呢?

    方法1 让 etc profile文件修改后立即生效 可以使用如下命令 etc profile 注意 和 etc profile 有空格 方法2 让 etc profile文件修改后立即生效 可以使用如下命令 source etc prof
  • go语言字符类型byte与rune

    字符串中的每一个元素叫做 字符 在遍历或者单个获取字符串元素时可以获得字符 Go语言的字符有以下两种 一种是 byte 型 是 uint8 的别名 代表了 ASCII 码的一个字符 另一种是 rune 类型 代表一个 UTF 8 字符 当需
  • Java中JDBC的数据库连接池

    数据库连接池 池参数 所有池参数都有默认值 初始大小 10个 最小空闲连接数 3个 增量 一次创建的最小单位 5个 最大空闲连接数 12个 最大连接数 20个 最大的等待时间 1000毫秒 四大连接参数 连接池也是使用四大连接参数来完成创建