Java学习-JDBC(四)

news2024/11/23 21:59:14

连接池

现有问题
  • 每次操作数据库都需要重新获取新连接,使用完毕后需close释放,频繁的创建和销毁造成资源浪费
  • 连接的数量无法把控,对服务器造成巨大压力
连接池
  • 连接池是数据库连接对象的缓冲区,通过配置,由连接池负责创建连接,管理连接,释放连接等操作
  • 预先创建数据库连接放入连接池,用户在请求时,通过连接池直接获取连接,使用完毕后,将连接放回池中,避免了频繁的创建和销毁,同时解决了创建效率
  • 当池中无连接可用,且达到上退时,连接池会新建连接
  • 池中连接达到上限,用户请求会等待,可以设置超时时间
常见连接池
  • JDBC数据库连接池使用javax.sql.DataSource接口进行规范,所有的第三方连接池都实现此接口,自行添加具体实现,所有连接池获取连接和回收连接方法都一样,不同的只有性能和扩展功能
    • DBCP是Apache提供的数据库连接池,速度相对C3P0较快,但自身有一些Bug
    • C3P0是一个开源组织提供的数据库连接池,速度相对较慢,稳定性比较好
    • Proxool是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点
    • Druid:阿里提供的数据库连接池,是集DBCP,C3P0,Proxool优点于一身的数据库连接池,性能,扩展性,易用性都更好,功能丰富
    • Hikari:是SpringBoot2.x之后内置的一款连接池,基于BoneCP做了不少改进和优化,口号是简单,快速,可靠
      在这里插入图片描述
Druid使用
硬编码
 public void testHardCodeDruid() throws SQLException {
        /**
         * 将连接池的配置和Java代码耦合在一起
         * 1.创建DruidDataSource连接池对象
         * 2.设置连接池的配置信息
         * 3.通过连接池获取连接对象
         * 4.回收连接
         */
        String url = "jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true";
        String username = "root";
        String password = "123456";
        //1.
        DruidDataSource dataSource = new DruidDataSource();
        //2.1必须设置配置
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        //2.2非必要设置
        dataSource.setInitialSize(10);//默认创建10个连接对象
        dataSource.setMaxActive(20); //最大连接数量
        //3.
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        //基于Connection进行CRUD
        //4.归还连接
        connection.close();
    }
软编码
  • 注:需要将resources文件夹标记为资源文件夹,否则通过getResourceAsStream获取时会获取不到
    在这里插入图片描述
//db.properties
driverName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true
username=root
password=123456
initialSize=10
maxActive=20

    @Test
    public void testSoftCodeDruid() throws Exception {
        //创建properties用于存放配置文件的key和value值
        Properties properties = new Properties();
        //读取配置文件,获取输入流,加载到properties集合
        InputStream is = DruidTest.class.getClassLoader().getResourceAsStream("db.properties");
        properties.load(is);
        //基于properties集合构建DruidDataSource连接池
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        //获取连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        //释放连接
        connection.close();

    }
HikariCP
  • 需要引入两个包
    在这里插入图片描述
硬编码
 /**
     * 将连接池的配置和Java代码耦合在一起
     * 1.创建HikariDataSource连接池对象
     * 2.设置连接池的配置信息
     * 3.通过连接池获取连接对象
     * 4.回收连接
     */
    @Test
    public void testHardCodeHikari() throws SQLException {
        String url = "jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true";
        String username = "root";
        String password = "Lotus!1120";
        //1.
        HikariDataSource dataSource = new HikariDataSource();
        //2.1必须设置配置
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        //2.2非必要设置
        dataSource.setMinimumIdle(10);//创建最小10个连接对象
        dataSource.setMaximumPoolSize(20); //最大连接数量
        //3.
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        //基于Connection进行CRUD
        //4.归还连接
        connection.close();
    }
软编码
//hikari.properties---放到resource目录下
driverClassName=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://192.168.29.201:3306/jdbc?rewriteBatchedStatements=true
username=root
password=Lotus!1120
minimumIdle=10
maximumPoolSize=20

  @Test
    public void testSoftCodeHikari() throws Exception {
        //创建properties用于存放配置文件的key和value值
        Properties properties = new Properties();
        //读取配置文件,获取输入流,加载到properties集合
        InputStream is = HikariTest.class.getClassLoader().getResourceAsStream("hikari.properties");
        properties.load(is);
        //创建HikariConfig连接池配置对象,将Properties集合传递进去
        HikariConfig hikariConfig = new HikariConfig(properties);
        //基于HikariConfig连接池配置对象,构建HikariDataSource
        HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
        //获取连接
        Connection connection = hikariDataSource.getConnection();
        System.out.println(connection);
        //释放连接
        connection.close();

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1810081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

刷机维修进阶教程-----红米k30 nv损坏故障 修复实例教程步骤解析

小米红米系列机型在米8起始就有了串码校验。不得随意更改参数限制。不同于其他机型,可以任意刷入同芯片的基带qcn来修复基带和串码丢失。米系列刷入同芯片基带qcn会提示nv损坏故障。是因为有串码校验。一般在于格机或者全檫除分区后写新参数出现的故障。 这种解决方法通常有两…

OpenAI与核聚变公司寻求合作,白宫拨款1.8亿美元用于核聚变商业化研究

在当下,由 AI 引发的新一轮能源危机已经不再是一个小概率的「黑天鹅」事件,而是一头正在向我们猛冲而来的「灰犀牛」。 Helion Energy,是一家总部位于美国华盛顿州埃弗雷特的能源创业公司。 3.5研究测试:hujiaoai.cn 4研究测试&am…

Pytorch 实现目标检测三(Pytorch 25)

一 目标检测数据集 目标检测领域没有像MNIST和Fashion‐MNIST那样的小数据集。为了快速测试目标检测模型,我们收集并标记了一个小型数据集。首先,我们拍摄了一组香蕉的照片,并生成了1000张不同角度和大小的香蕉图像。然 后,我们在…

基于STM32开发的智能空气质量监控系统

⬇帮大家整理了单片机的资料 包括stm32的项目合集【源码开发文档】 点击下方蓝字即可领取,感谢支持!⬇ 点击领取更多嵌入式详细资料 问题讨论,stm32的资料领取可以私信! 目录 引言环境准备智能空气质量监控系统基础代码实现&…

Kafka的分区副本机制

目录 生产者的分区写入策略 轮询策略 随机策略 按key分配策略 乱序分区 自定义分区策略 实现步骤: 消费者组Rebalance机制 Rebalance触发时机 Rebalance的不良影响 消费者分区分配策略 Range范围分配策略 RoundRobin轮询策略 Stricky粘性分配策略 生产…

冯喜运:6.11#现货黄金#美原油#行情趋势分析及操作建议

【黄金消息面分析】:随着全球经济的波动,黄金作为传统的避险资产,其价格走势一直备受投资者关注。上周五,美国非农就业报告的强劲表现给美联储降息预期泼了冷水,同时,中国5月份未增持黄金,结束了…

Unity ShaderGraph 扭曲

需要注意的是: HDRP ShaderGraph中 你不能扭曲UI,所以假如你要扭曲视频,请把视频在材质上渲染 播放,这样就可以扭曲视频了喔, ShaderGraph扭曲

3、线性代数

1、矩阵转置 A[i,j]A[j,i] 2、对称矩阵 :A转置A [0,2,3] [2 1 5] [3,5,1] 3、三维矩阵 求和 axis0 两个矩阵相加 axis1 两个向量相加 ,axis2 向量内部相加 keepdimsTrue 求和后维度保持不变 4、cumsum累加求和 5、torch.mm() 或 torch.bmm() 【矩…

CleanMyMac2024最新免费电脑Mac系统优化工具

大家好,我是你们的好朋友——软件评测专家,同时也是一名技术博主。今天我要给大家种草一个超级实用的Mac优化工具——CleanMyMac! 作为一个长期使用macOS的用户,我深知系统运行时间长了,缓存文件、日志、临时文件等都会…

【高校科研前沿】广西大学博士生冯德东为一作在Habitat Int发文:区域乡村性与贫困治理变化的时空格局及相关效应——以滇桂黔石漠化地区为例

1.文章简介 论文名称:Spatio-temporal patterns and correlation effects of regional rurality and poverty governance change: A case study of the rocky desertification area of Yunnan-Guangxi-Guizhou, China(区域乡村性与贫困治理变化的时空格…

Magnet pro for mac v2.14.0中文激活版:高效窗口管理工具

Magnet for Mac是一款专为Mac用户设计的窗口管理工具,旨在帮助用户更高效地管理和布局多个应用程序窗口,提升工作效率。 Magnet pro for mac v2.14.0中文激活版下载 这款软件拥有直观易用的界面和丰富的功能,支持用户将屏幕分割成多个区域&a…

【Linux】用户和组的管理、综合实训

目录 实训1:用户的管理 实训2:组的管理 实训3:综合实训 实训1:用户的管理 (1)创建一个新用户userl,设置其主目录为/home/user 1。 (2)查看/etc/passwd 文件的最后一行,看看是如何记录的。 (3)查看文件/etc/shadow文件的最后一…

QT 使用资源文件的注意点

不要存放没有使用的资源文件 即使在代码中没有使用到的资源文件,也会编译到执行文件或者DLL里面去这样会增大它的体积。如下 在代码没有使用这个资源文件(10.4M的2k图片),但是编译出来的程序有 12M左右的大小 1 假设我们有一个比较复杂的项目&#…

渗透测试模拟实战(二)-BlueCMS平台

渗透测试 渗透测试是维护网络安全的重要组成部分,可以帮助组织识别并修复潜在的安全漏洞,减少被恶意攻击的风险。然而,进行渗透测试时必须遵守法律和道德规范,确保所有活动都在授权范围内进行。 环境部署: study2016、…

Java:集合框架

1.Collection接口 collection接口是Java最基本的集合接口,它定义了一组允许重复的对象。它虽然不能直接创建实例,但是它派生了两个字接口List和Set,可以使用子接口的实现类创建实例。Collection 接口是抽取List接口和Set接口共同的存储特点和…

面试官:Spring如何解析配置类

你好,我是柳岸花开。 大家好,今天我们来深入探讨一下Spring框架中的配置类解析与扫描过程的源码。Spring作为Java开发中最为广泛使用的框架之一,其核心机制一直是开发者关注的焦点。本文将带领大家从源码角度,详细剖析Spring配置类…

构建高效的数据存储系统:Python dbm 模块的应用与实践

🍀 前言 博客地址: CSDN:https://blog.csdn.net/powerbiubiu 👋 简介 dbm(Database Manager)是Python中的一个模块,用于创建和管理简单的键值对数据库。它提供了一种简单而有效的方式来存储和…

HTML静态网页成品作业(HTML+CSS)—— 环保主题介绍网页(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

hadoop未授权访问命令执行漏洞复现-vulfocus

1 介绍 Hadoop YARN(Yet Another Resource Negotiator)的ResourceManager是集群资源管理的核心组件,负责分配和管理集群资源以及调度作业。如果ResourceManager出现未授权访问漏洞,可能允许未经认证的用户访问或操作集群资源&…

二叉树顺序结构——堆的结构与实现

二叉树顺序结构——堆的结构与实现 一、二叉树的顺序结构二、堆的概念及结构三、堆的实现堆向下调整算法堆的创建建堆时间复杂度堆的插入(堆向上调整算法)堆的删除堆的代码实现(使用VS2022的C语言)初始化、销毁构建、插入、删除返回堆顶元素、判空、返回有效元素个数 四、完整 …