当前位置: 首页 > news >正文

druid(德鲁伊)数据线程池连接MySQL数据库

文章目录

  • 1、druid连接MySQL
  • 2、编写JDBCUtils 工具类

1、druid连接MySQL

初学JDBC时,连接数据库是先建立连接,用完直接关闭。这就需要不断的创建和销毁连接,会消耗系统的资源。

借鉴线程池的思想,数据连接池就这么被设计出来了。

什么是连接池?
连接池是在程序初始化的时候,预先创建好指定数量的数据库连接对象,存储与连接池中,需要用的时候就去取,用完还回来。数据库连接池就是为数据库的连接建立一个“缓冲区”,预先在“缓冲池”中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲区”中取出,使用完毕后再放回去,这样就不会有频繁的创建和销毁,从而节省系统的资源。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。

对比传统的数据库连接,有以下缺点:

  • 普通JDBC使用DriverManager来获取,每次向数据库建立连接都将Connection加载到内存,执行完毕后再断开,这样会消耗大量的时间和资源,数据库的连接资源并没有被很好的利用,若同时几百人甚至几千人在线,频繁的进行数据库连接操作会占用很多资源,严重甚至会造成服务器的崩溃。
  • 每一次连接后都要断开,否则,程序会出现异常没能及时关闭会导致数据库系统中的内存泄露(java 内存泄露)
  • 不能控制被创建的连接对象,系统资源会毫无顾忌的分配出去,如连接过多,可能会导致服务器崩溃。

数据库连接池有以下优点:

  • 提高程序响应速度,减少创建连接的响应时间
  • 减低资源的消耗,可以重复使用以及提供数据库的连接
  • 便于管理

连接池市面上有很多,有druid(德鲁伊)、c3p0、dbcp……
其中 c3p0 和 dbcp 是国外的,druid 是国内常用的,是阿里巴巴做的一个开源技术,性能很好,如今全世界的Java程序员都可以使用。

使用步骤:
1、导入druid.jar包!!!;
2、创建一个 Properties 形式的配置文件,可以放在 src 目录下;
3、获取数据库连接池对象,通过工程的一个类来获取:DruidDataSourceFactory;
4、获取连接;

例程1 —— druid 数据线程池连接数据库,并遍历数据库的数据:

package com.test;import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;public class Test {public static void main(String[] args) throws Exception {//加载配置文件Properties pro = new Properties();InputStream is = Test.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//获取连接池对象DataSource ds = DruidDataSourceFactory.createDataSource(pro);//获取连接Connection con = ds.getConnection();//遍历数据库Statement stmt = con.createStatement();ResultSet res = stmt.executeQuery("SELECT * FROM tb_student");try {while(res.next()) {int id = res.getInt("id");String studentNumber = res.getString("studentNumber");String name = res.getString("name");String gender = res.getString("gender");String classAndGrade = res.getString("classAndGrade");String politicsStatus = res.getString("politicsStatus");String dateOfBirth = res.getString("dateOfBirth");String phone = res.getString("phone");String homeAddress = res.getString("homeAddress");System.out.print("序号:" + id + " ");System.out.print("学号:" + studentNumber + " ");System.out.print("姓名:" + name + " ");System.out.print("性别:" + gender + " ");System.out.print("班级:" + classAndGrade + " ");System.out.print("政治面貌:" + politicsStatus + " ");System.out.print("出生日期:" + dateOfBirth + " ");System.out.print("电话:" + phone + " ");System.out.print("家庭地址:" + homeAddress + " ");System.out.println();}}catch (Exception e) {System.out.println("遍历数据库失败,原因:");e.printStackTrace();}}
}
# druid.Properties文件配置备份# 加载驱动
driverClassName = com.mysql.cj.jdbc.Driver
# url
url = jdbc:mysql://localhost:3306/test1?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
# 用户名
username = root
# 密码
password = 123456
# 初始连接数
initialSize = 10
# 最小连接
minIdle = 5
# 最大连接
maxActive = 50
# 超时时间
maxWait = 5000

工程配置如下:
在这里插入图片描述
运行结果中,7月 12, 2024 8:46:46 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited解释如下:
在这里插入图片描述

成功使用 druid 连接 MySQL 后,为了方便数据库连接池的连接,可以定义一个 Druid 的工具类,该工具封装了获取连接,关闭连接的方法。

2、编写JDBCUtils 工具类

成功使用 druid 连接 MySQL 后,为了方便数据库连接池的连接,可以定义一个 Druid 的工具类,该工具封装了获取连接,关闭连接的方法。
JDBCUtils.java

package com.test;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;//Druid 连接池的工具类
public class JDBCUtils {//定义成员变量@SuppressWarnings("unused")private static DataSource ds;static {try {//加载配置文件Properties pro = new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));//获取DataSourceds = DruidDataSourceFactory.createDataSource(pro);} catch (Exception e) {e.printStackTrace();}}//获取连接public static Connection getConnection() throws SQLException{return ds.getConnection();}//释放资源public static void close(ResultSet rs, Statement stmt, Connection conn) {if(rs != null) {try {rs.close();}catch (Exception e) {e.printStackTrace();}}if(stmt != null) {try {stmt.close();}catch (Exception e) {e.printStackTrace();}}if(conn != null) {try {conn.close();}catch (Exception e) {e.printStackTrace();}}}public static void close(Statement stmt, Connection conn) {close(null, stmt, conn);}
}

主方法:

package com.test;import java.sql.*;public class Test {public static void main(String[] args) throws Exception {Connection conn = null;Statement stmt = null;ResultSet res = null;try {//获取连接conn = JDBCUtils.getConnection();//查询遍历数据库stmt = conn.createStatement();res = stmt.executeQuery("SELECT * FROM tb_student");while(res.next()) {int id = res.getInt("id");String studentNumber = res.getString("studentNumber");String name = res.getString("name");String gender = res.getString("gender");String classAndGrade = res.getString("classAndGrade");String politicsStatus = res.getString("politicsStatus");String dateOfBirth = res.getString("dateOfBirth");String phone = res.getString("phone");String homeAddress = res.getString("homeAddress");System.out.print("序号:" + id + " ");System.out.print("学号:" + studentNumber + " ");System.out.print("姓名:" + name + " ");System.out.print("性别:" + gender + " ");System.out.print("班级:" + classAndGrade + " ");System.out.print("政治面貌:" + politicsStatus + " ");System.out.print("出生日期:" + dateOfBirth + " ");System.out.print("电话:" + phone + " ");System.out.print("家庭地址:" + homeAddress + " ");System.out.println();}}catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.close(res, stmt, conn);}}
}

工程结构:
在这里插入图片描述

相关文章:

druid(德鲁伊)数据线程池连接MySQL数据库

文章目录 1、druid连接MySQL2、编写JDBCUtils 工具类 1、druid连接MySQL 初学JDBC时,连接数据库是先建立连接,用完直接关闭。这就需要不断的创建和销毁连接,会消耗系统的资源。 借鉴线程池的思想,数据连接池就这么被设计出来了。…...

观察者模式的实现

引言:观察者模式——程序中的“通信兵” 在现代战争中,通信是胜利的关键。信息力以网络、数据、算法、算力等为底层支撑,在现代战争中不断推动感知、决策、指控等各环节产生量变与质变。在软件架构中,观察者模式扮演着类似的角色…...

Eureka: Netflix开源的服务发现框架

在微服务架构中,服务发现是一个关键组件,它允许服务实例之间相互发现并进行通信。Eureka是由Netflix开源的服务发现框架,它是Spring Cloud体系中的核心组件之一。Eureka提供了服务注册与发现的功能,支持区域感知和自我保护机制&am…...

go-基准测试

基准测试 Demo // fib_test.go package mainimport "testing"func BenchmarkFib(b *testing.B) {for n : 0; n < b.N; n {fib(30) // run fib(30) b.N times} }func fib(n int) int {if n 0 || n 1 {return n}return fib(n-2) fib(n-1) }benchmark 和普通的单…...

线性代数|机器学习-P23梯度下降

文章目录 1. 梯度下降[线搜索方法]1.1 线搜索方法&#xff0c;运用一阶导数信息1.2 经典牛顿方法&#xff0c;运用二阶导数信息 2. hessian矩阵和凸函数2.1 实对称矩阵函数求导2.2. 线性函数求导 3. 无约束条件下的最值问题4. 正则化4.1 定义4.2 性质 5. 回溯线性搜索法 1. 梯度…...

SQL,python,knime将数据混合的文字数字拆出来,合并计算实战

将下面将数据混合的文字数字拆出来&#xff0c;合并计算 一、SQL解决&#xff1a; ---创建表插入数据 CREATE TABLE original_data (id INT AUTO_INCREMENT PRIMARY KEY,city VARCHAR(255),value DECIMAL(10, 2) );INSERT INTO original_data (city, value) VALUES (上海0.5…...

mac ssh连接工具

在Mac上&#xff0c;有多个SSH连接工具可供选择&#xff0c;这些工具根据其功能和适用场景的不同&#xff0c;可以满足不同用户的需求。以下是一些推荐的SSH客户端软件&#xff1a;12 iTerm2&#xff1a;这是一款功能强大的终端应用程序&#xff0c;提供了丰富的功能和定制选项…...

阿里通义音频生成大模型 FunAudioLLM 开源

简介 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的进步极大地改变了人类与机器的互动方式&#xff0c;特别是在语音处理领域。阿里巴巴通义实验室最近开源了一个名为FunAudioLLM的语音大模型项目&#xff0c;旨在促进人类与大型语言模型&#xff08;LLMs&…...

通用详情页的打造

背景介绍 大家都知道&#xff0c;详情页承载了站内的核心流量。它的量级到底有多大呢&#xff1f; 我们来看一下&#xff0c;日均播放次数数亿次&#xff0c;这么大的流量&#xff0c;其重要程度可想而知。 在这样一个页面&#xff0c;每一个功能都是大量业务的汇总点。 作为…...

java内部类的本质

定义在类内部&#xff0c;可以实现对外部完全隐藏&#xff0c;可以有更好的封装性&#xff0c;代码实现上也往往更为简洁。 内部类可以方便地访问外部类的私有变量&#xff0c;可以声明为private从而实现对外完全隐藏。 在Java中&#xff0c;根据定义的位置和方式不同&#xf…...

vue3 学习笔记08 -- computed 和 watch

vue3 学习笔记08 – computed 和 watch computed computed 是 Vue 3 中用于创建计算属性的重要 API&#xff0c;它能够根据其它响应式数据动态计算出一个新的值&#xff0c;并确保在依赖数据变化时自动更新。 基本用法 squaredCount 是一个计算属性&#xff0c;它依赖于 count…...

Python-PLAXIS自动化建模技术与典型岩土工程案例

有限单元法在岩土工程问题中应用非常广泛&#xff0c;很多软件都采用有限单元解法。在使用各大软件进行数值模拟建模的过程中&#xff0c;岩土工程中的各种问题&#xff08;塑性、渗流、固结、动力、稳定安全、热力TM&#xff09;&#xff0c;一步一步地搭建自己的Plaxis模型&a…...

license系统模型设计使用django models

User (用户)License (许可证)Product (产品)LicenseAssignment (许可证分配) 简单的模型定义&#xff1a; from django.db import models from django.contrib.auth.models import Userclass Product(models.Model):name models.CharField(max_length255)description model…...

【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式

注释&#xff1a; RTCM响应消息1020为GLONASS星历信息&#xff0c;暂不介绍&#xff0c;前公司暂未研发RTCM消息类型版本的DR/RTK模块&#xff0c;DR/RTK模块仅NMEA消息类型使用 注释&#xff1a; 公司使用的多信号语句类型为MSM4&MSM7&#xff0c;也应该是运用最广泛的语句…...

vue3-vite-pinia模板

模板说明 下载 git clone https://github.com/AIxiaoHanBao/vue-template.gitmodule参数 node版本 16 UI组件库 element-plus 持久化 pinia 网络请求 axios 路由 vue-router 使用说明 权限管理目录access资源目录assets组件目录components页面目录pages网络请求目录re…...

华为HCIP Datacom H12-821 卷38

1.多选题 下面关于 BGP中的公认属性的描述&#xff0c;正确的是 A、公认必遵属性是所有BGP路由器都识别&#xff0c;且必须存在于Updata消息中心 B、BGP必须识别所有公认属性 C、公认属性分为公认必遵和可选过渡两种 D、公认任意属性是所有BGP造由器都可以识别&#xff0c…...

C语言求10进制转2进制(除2取余法)

1.思路&#xff1a;除2取余法&#xff0c;也就是说用除以2取余来将10进制数转换为二进制 2.两种代码实现&#xff0c;这里用了两&#xff0c;一个递归一个非递归。 递归是一种编程技术&#xff0c;其中一个函数直接或间接地调用自己。递归通常用于解决那些可以被分解为更小的、…...

PHP 调用淘宝详情 API 接口的方法与实践

以下是关于“PHP 调用淘宝详情 API 接口的方法与实践”的一篇文章示例&#xff1a; PHP 调用淘宝详情 API 接口的方法与实践 在当今的电商时代&#xff0c;获取淘宝商品的详情信息对于许多开发者来说是一项重要的任务。使用 PHP 语言来调用淘宝详情 API 接口&#xff0c;可以…...

风景区服务热线系统:智能化时代的旅游新选择

一、引言 1 、风景区服务热线系统的概念 风景区服务热线系统是指为游客提供实时旅游信息咨询、投诉处理、紧急救援等一系列服务的电话和网络平台。它不仅是景区与游客之间的重要沟通桥梁&#xff0c;也是提升游客满意度、优化景区管理的重要手段。 2 、智能化时代对旅游服务…...

Linux修改配置文件后无法使用命令或无法进入桌面

如果你是修改了配置文件&#xff0c;如 sudo vim /etc/profile重启无数次发现无法进入桌面&#xff0c;不要着急重装系统&#xff01;&#xff01;&#xff0c;怎么造成的怎么改就行了 以下方案需要root密码&#xff0c;忘记密码详见&#xff1a;Linux忘记root密码怎么办 一…...

安卓14中Zygote初始化流程及源码分析

文章目录 日志抓取结合日志与源码分析systemServer zygote创建时序图一般应用 zygote 创建时序图向 zygote socket 发送数据时序图 本文首发地址 https://h89.cn/archives/298.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 本文主要结合日志和代码看安卓 14 中 Zy…...

等保一体机 | 什么是等保一体机?一台机器就能过等保吗?

什么是等保一体机&#xff1f; 对于中小型企业来说&#xff0c;他们在接触到等保的条件下&#xff0c;可能会觉得成本太高了&#xff0c;毕竟整改的时候&#xff0c;几台安全设备下来报价就几十w。 也许有些人会听说过等保一体机 那么什么是等保一体机呢&#xff1f; 等保一…...

【活动预告】Apache IoTDB TsFile 智慧能源应用“上会”啦!

2024 年&#xff0c;站在中国数字经济产业升级和数据要素市场化建设的时代交汇点上&#xff0c;为进一步推动全球数据库产业进步&#xff0c;由中国通信标准化协会、大数据技术标准推进委员会主办的“2024 可信数据库发展大会”将于 2024 年 7 月 16-17 日&#xff0c;在北京朝…...

【公益案例展】中国电信安全大模型——锻造安全行业能量转化的高性能引擎...

‍ 电信安全公益案例 本项目案例由电信安全投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2024中国数智产业最具社会责任感企业》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 以GPT系列为代表的大模型技术&#xff0c;展现了人工智能技术与应…...

CV07_深度学习模块之间的缝合教学(2)--维度转换

教学&#xff08;1&#xff09;&#xff1a;链接 1.1 预备知识 问题&#xff1a;假如说我们使用的模型张量是三维的&#xff0c;但是我们要缝合的模块是四维的&#xff0c;应该怎么办&#xff1f; 方法&#xff1a;pytorch中常用的函数&#xff1a;(1)view函数&#xff08;2…...

Oracle字符集修改

提示 Oracle数据库默认的字符集编码为US7ASCII&#xff0c;这个编码是不支持中文的&#xff0c;如果想要在数据库存储中文&#xff0c;就需要修改编码为ZHS16GBK或UTF-8 编码和字符集是一个意思&#xff0c;只是叫法不一样而已 前置条件 修改字符集的前提是知道我们现在用的是什…...

k8s核心操作_k8s中的存储抽象_基本概念与NFS搭建_Deployment使用NFS进行挂载---分布式云原生部署架构搭建028

然后我们继续开始看 如果我们使用容器部署,比如我们有三个节点,一个是master,一个node1 一个是node2 那么pod 中我们可以看到,容器中的 /data 等各个目录都映射了出来了,但是 如果比如上面红色的部分,有个pod,原来在node2上,最右边那个,但是这个pod宕机了 那么,k8s会在node…...

数学建模·熵权法

熵权法 一种计算评价指标之间权重的方法。熵权法是一种客观的方法&#xff0c;没有主观性&#xff0c;比较可靠。 具体定义 熵权法的核心在于计算信息熵&#xff0c;信息熵反映了一个信息的紊乱程度&#xff0c;体现了信息的可靠性 具体步骤 Step1正向化处理 将所以评价指标转…...

开放开源开先河(一)

2022年7月28日&#xff0c;以“软件定义世界 开源共筑未来”为主题的全球数字经济大会开放原子开源峰会在北京开幕&#xff0c;承办主峰会和为捐赠人进行授牌仪式的开放原子开源基金会再次进入公众视野。基金会秘书长孙文龙从汇聚全球产业链开源力量、核心链接能力、开发者分享…...

美团收银Android一面凉经(2024)

美团收银Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《美团收银Android一面凉经(2024)》。 应聘岗位: 美团餐饮PaaS平台Android开发工程师…...

徐州哪家做网站好/网站用户体验优化

在64位 OL7 或者 RHEL7 上安装 Oracle Database 19c 数据库的要求在继续安装之前&#xff0c;请花一些时间认真复查以下各项要求&#xff0c;以避免安装二进制文件期间出现任何明显的问题。下载 Oracle Database 19c 软件从 OTN 下载 Oracle Database 19c 软件 - https://www.o…...

徐州免费网站建设/空间刷赞网站推广

最近公司申请了华为云的资源做测试。在丢了一个小项目上去测试之后&#xff0c;发现系统CPU异常繁忙&#xff0c;系统重启之后情况依旧&#xff0c;连接服务器异常缓慢。这时也接到华为云的客服电话说测试服务器同***服务器之间有通信&#xff0c;让我们确认是不是正常的情况。…...

东莞哪家公司做网站好/seo软文是什么意思

| | | | 上面我们调整不同的 index 只显示出来了一个子项 Widget&#xff0c;如果我们把 IndexedStack 换成 Stack 则会显示成如下效果。 IndexedStack 源码 alignment 对齐方式sizing 填充方式index 显示子项索引children 子项集合 本篇主要聊 index 和 children &…...

wordpress poiplayer/如何推广品牌知名度

如何解决Activiti-modeler无法使用的问题 之前学习Activity的时候在网上面找了各种关于modeler使用说明&#xff0c;但是往往必须非常严格的按照教程的路线进行使用。 一、了解modeler需要些什么才能够正常运作 首先就是将activity框架搞定&#xff0c;如果连这个都没有的话也就…...

制作做网站的基本流程/搜索引擎哪个好

<p> 最近在学一部分前端&#xff0c;知识点很多&#xff0c;却没怎么系统地应用过&#xff0c;因而理解可能不够深吧。所以我想做点片段似的东西&#xff0c;不懂的再在网上搜一搜&#xff0c;这样可能会更有意思点&#xff0c;所以做了这个记录&#xff0c;希望自己坚持…...

wordpress 324/十大免费最亏的免费app

1、创建shell脚本文件 创建文件&#xff0c;为文件添加可执行权限 chmod x file格式&#xff1a;在文件的第一行指定所使用的shell#!/bin/bash注释&#xff1a;#开头的命令&#xff08;首行的 #!/bin/bash 除外&#xff09;显示消息&#xff1a;echo命令默认情况下不需要加引号…...