JDBC加载MySQL驱动【底层实现】

news/2024/11/13 10:55:57/文章来源:https://www.cnblogs.com/dragon-925/p/18354884

JDBC4.0如何加载

  1. 引入依赖

      <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency>
    
  2. 上代码

     import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DatabaseUtil {public static Connection getConnection() throws SQLException {// 驱动会自动注册,无需手动加载String url = "jdbc:mysql://localhost:3306/mydb";String user = "user";String password = "password";return DriverManager.getConnection(url, user, password);}}
    

在这个过程中,如何加载到mysql-connector-java的呢?

进入DriverManager类中会发现如下内容:

走到loadInitialDrivers()方法中看:

会发现他去加载了Driver.class,而这个类是rt.jar里的一个接口

从上面的run()方法中,不难看出利用了ServiceLoader.load(),去加载了他的实现类

  ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);Iterator<Driver> driversIterator = loadedDrivers.iterator();try{while(driversIterator.hasNext()) {driversIterator.next();}} catch(Throwable t) {// Do nothing}

再看下ServiceLoader类中:

通过Iterator<Driver> driversIterator = loadedDrivers.iterator();

  while(driversIterator.hasNext()) {driversIterator.next();}

去迭代获取加载Driver,而,我们的MySQL驱动就在其中:

通过以上步骤,就可以明白 com.mysql:mysql-connector-j:8.0.32中的驱动是如何加载的了

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tensorboard_logger库无法导入的问题解决

一、问题描述最近在学习深度学习时,从大神们那里copy的代码中有用到tensorboard_logger这个库的东西,所以很自然地就用conda install或者pip去安装它,但是结果是:python开源库里面没有这东西。 这就让我很苦恼,所以只能自己动手,丰衣足食了。 二、解决方法首先找到tenso…

sqlserver 2000 数据库文件*。mdf附加到sql2008 报错 提示使用dbcc checkcatalog检查

sqlserver 2000 数据库文件*。mdf附加到sql2008 报错 提示使用dbcc checkcatalog检查检查提示有两个存储过程对象 在 SYSOBJECTS 与 SYSCOMMENTS 之间不匹配。drop procedure TS_G_ArApIniModiy drop procedure TS_T_CRMContactionQry 删除这两个存储过程之后可以直接在sqlser…

广东盈致MES系统——注塑和冲压行业的智能化管理

广东注塑冲压行业MES制造执行系统是一种专门为注塑和冲压行业设计的生产管理系统,可以帮助企业实现生产过程的智能化管理和优化。盈致MES系统是一种常见的MES系统,具有以下特点和功能: 生产计划和调度:MES系统可以帮助企业进行生产计划和任务调度,根据订单需求和资源情况进…

电子取证

内存取证、磁盘取证、服务器取证电子取证tool DiskGenius、FTK、Rstudio,各种都挂一手文件位置 windows ntds.dit: C:\Windows\NTDS\NTDS.dit system: C:\Windows\System32\config\SYSTEM sam: C:\Windows\System32\config\SAMpowershell命令记录:\AppData\Roaming\Mi…

Python deepface:让你的代码轻松地实现人脸识别功能

楔子 在 GitHub 上面发现了一个非常有趣的库,叫 deepface,简直是人间宝藏。这个库主要是做人脸识别和面部属性分析的,它集合了目前全球最顶尖的开源人脸识别算法,使用卷积神经网络(CNN)对图像进行特征提取,以实现高精度的人脸识别。实验表明,人类在面部识别任务上的准确…

翔云PHP身份证识别接口集成示例-护照识别-港澳台通行证识别

证件识别接口简介: 证件识别接口一般是指针对各类证件进行识别,其中包含但不限于身份证识别、护照识别、港澳台通行证识别、户口页识别、驾驶证识别、行驶证识别、台湾健保卡等,其​多应用于需要进行实名认证与证件信息登记的场景。 证件身份证识别接口返回结果示例如下:证…

雅思考试官方指南(第2版)配套资源 All In One

雅思考试官方指南(第2版)配套资源 All In One 听力 (音频) / 口语 (视频) International English Language Testing System (IELTS)雅思考试官方指南(第2版)配套资源 All In One听力 (音频) / 口语 (视频)https://mp.pxwhqr.cn/book.htm?id=236649&sign=1a6d5b&au…

Vue + ElementUI表格内实现图片点击放大效果的两种方式

方式一:使用el-popover弹出框 trigger属性用于设置何时触发Popover(弹出框)属性值有:hover、click、focus 和 manual style="cursor:pointer":当鼠标放上去时让img标签出现小手状态<el-table-column label="物品图片" header-align="center&quo…

2024纷享销客逆势再获7500万美元投资

8月12日,纷享销客宣布完成新一轮7500万美元的战略投资,由钟鼎资本领投,启明创投与建发新兴投资跟投,这是继2023年7月在IPO资本协助下获贵阳创投3000万美元投资后,纷享销客在一年间再获投资,这也是其连续第四年获得新的投资。 本轮融资后,纷享销客将一如既往地持续完善产…

wpf 如何7步写一个badge控件

首先看一下效果: 任意控件可以附加一个文字在控件的右上角,并带有红色背景 第一步,新建一个空的wpf项目: 第二步,创建一个类,取名为badge: 第三步,将badge的父类设置成 System.Windows.Documents.Adornerpublic class Badge : Adorner{public Badge(UIElement adornedEle…

CSS 绘制扇面

参考资料:https://juejin.cn/post/7266641059282927650效果:源码:<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…

咪咕视频m3u8地址解析及ddCalcu参数加密逆向

本文主要讲述咪咕视频m3u8地址的解析以及使用Wasm对视频的m3u8地址进行加密得到ddCalcu参数的方法。咪咕视频m3u8地址解析及ddCalcu参数加密逆向 概述 本文主要讲述咪咕视频m3u8地址的解析以及使用Wasm对视频的m3u8地址进行加密得到ddCalcu参数的方法。 使用视频ID获取未加密的…