JDBC为什么使用反射加载驱动

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一直不太明白在使用JDBC的时候用Class.forName("com.mysql.jdbc.Driver")去加载驱动,就谷歌了一下,得到如下答案:


前言

JDBC源码地址
还有
在解释具体原因之前先简单看下Class.forName做了什么。假设一个类以前从来没有被装进内存过,Class.forName(String className)这个方法会做以下几件事情:
1、装载。将字节码读入内存,并产生一个与之对应的java.lang.Class类对
2、连接。这一步会验证字节码,为static变量分配内存,并赋默认值(0或null),并可选的解析符号引用(这里不理解没关系)
3、初始化。为类的static变量赋初始值,假如有static int a = 1;这个将a赋值为1的操作就是这个时候做的。除此之外,还要调用类的static块。(这一步是要点)
Class.forName(String className)方法会将这三步都做掉,

基本原因

首先,上面一段代码的主要作用,是在运行期以反射的方式来检查JDBC驱动的主类com.mysql.jdbc.Driver是否存在,若不存则表示运行环境中没有这个驱动,进入catch段。如果你确定一定以及肯定它会存在,可以直接写成

import com.mysql.jd
JDBC加载数据库驱动的三种方法 JDBC加载数据库驱动的三种方法 简单高效 立即下载

相关推荐

JDBC驱动加载的过程分析(上)

JDBC驱动加载的过程分析(上)

JDBC篇】Class.forName原理剖析

Class.forName原理剖析,为什么Class.forName可以注册驱动

m0_64231944的博客 1429

jdbc驱动程序

mssqlserver2000 and mysql 博文链接:https://yk10274431.iteye.com/blog/216731

jdbc 获取数据库连接的五种方式,为什么反射加载Driver 类时 Class.forName(“com.mysql.cj.jdbc.Driver“); 可以省略

方式1 方式2 jdbcConn.java 使用反射加载Driver类, 动态加载 ,更加灵活 方式3 使用DriverManager 替代 driver进行统一管理,扩展性更好,看起来更清晰 方式4 自动完成驱动 ,简化代码 //使用反射加载了Driver 类 此种方式使用最多 //在加载 Driver 类时,完成注册 /* 为什么利用反射就可以用再注册驱动了? 源码如下 : mysql 驱动 5.1.6 以后可以无需 Class.forName(“com.mysql.cj.

LuckyJerry66的博客 1058

JDBC加载驱动使用Class.forName()用法详解

类是程序的一部分,每个类都有一个class对象。换言之,每当编写并且编译了一个新类,就会产生一个class对象(更恰当的说,是被保存在一个同名的class文件中)。为了生成这个类的对象,运行这个程序的Java虚拟机(jvm)将使用被称为“类加载器”的子系统。所有的类都是在对其第一次使用的时候被加载到JVM中。如当程序创建对第一个静态成员的引用时,就会加载这个类。或者使用new关键字创建新的对象的时候。因此java程序在它运行之前并非完全加载,其各个部分是在必须的时候才加载的。

qq_52519008的博客 1647

JDBC驱动加载

JDBC JDBC流程 加载驱动:Class.forname(“数据驱动”); JDBC所用jar包下载 获取连接:Connection con = DriverManage.getConnetion(); package com.zf.dao; import com.zf.pojo.User; import com.zf.util.DButil; import java.sql.Connection; import java.sql.PreparedStatement; import j

lanziDemo blog 1837

JDBC加载数据库驱动程序

JDBC加载数据库驱动程序

weixin_50993868的博客 1425

为什么JDBC加载驱动使用反射

原文链接:https://www.cnblogs.com/homejim/p/8076481.html 在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤。 JDBC流程:第一步:加载Driver类,注册数据库驱动;第二步:通过DriverManager,使用url,用户名和密码建立连接(Connection);第三步:通过Connection,使用sql语句打开St...

weixin_30530523的博客 711

JDBC驱动加载机制与反射应用

本文探讨了JDBC驱动加载机制及其反射应用。JDBC驱动通过依赖管理工具加载,包括初始化资源配置和动态加载功能,利用Java反射机制实现运行时驱动注册与参数配置。反射技术还用于性能优化和连接池管理,提升数据库连接效率。研究表明,JDBC驱动反射机制的结合能提高系统灵活性、扩展性和性能,降低开发成本。该领域未来仍有较大发展空间。

2501_90410679的博客 60

Java反射机制在JDBC驱动加载中的实现流程

本文探讨了Java反射机制在JDBC驱动加载中的应用。反射机制通过运行时动态加载类、创建实例和调用方法,实现了JDBC驱动的灵活加载与注册。文章详细分析了反射机制在驱动加载各环节的运用,包括接口定义、类实例创建、驱动注册及数据库操作等流程。同时指出反射机制的优势在于提高程序灵活性、可扩展性和可维护性,特别适用于数据库连接池、ORM框架等场景。研究表明,熟练掌握Java反射机制对提升开发效率和系统性能具有重要意义。

2501_90410679的博客 74

mysql驱动为什么自动加载_为什么JDBC加载驱动使用反射

原文链接:https://www.cnblogs.com/homejim/p/8076481.html在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤。JDBC流程:第一步:加载Driver类,注册数据库驱动;第二步:通过DriverManager,使用url,用户名和密码建立连接(Connection);第三步:通过Connection,使用sql语句打开Statement对象...

weixin_29157533的博客 580

JDBC】【MySQL】以类加载的方式注册驱动反射

package test.jdbc; //JDBC注册驱动的另一种方式:(这种方式常用) /* 如何让一个类的静态代码块执行? 所以直接反射此处要学习到的这个类,class文件。这个类就会被加载进JVM,静态代码块在类加载时执行,所以就注册了 就是利用反射加载Driver类,利用类中的静态代码块实现对驱动的注册 那么如何加载这个类? 非常简单:反射机制! Class.forName("com.mysql.jdbc.Driver"); Class.forName(类名); 这个类的执行会导致后面类的.

m0_56164356的博客 1182

Java架构师基础之反射机制(以JDBC为例)

1、什么是反射反射Java的特征之一,是一种间接操作目标对象的机制,核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的所有属性和方法,调用方法/访问属性,需要提前在编译期知道运行的对象是谁,允许运行中的Java程序获取类的信息,并且可以操作类或对象内部属性。 2、反射机制的主要作用? 通过反射机制访问Java对象的属性和方法。 3、反射应用场景? (1...

雲浩的博客 714

mysql jdbc驱动源码分析(驱动加载

jdbc链接数据库的时候我们知道有如下几个步骤: 1、加载驱动 2、获取数据库链接Connection 3、获取statement、preparedstatement 4、执行查询、更新语句获取结果ResultSet 5、调用ResultSet结果集实例的方法来获取数据 6、释放资源 第一篇我们就来看看驱动以及加载驱动: 我们刚开始学的时候会有这样的疑问,什么是驱动驱动

bit-cafe 4621

java 反射 作用_java反射机制作用

我想题主想问的是如下代码为何要使用反射:try {Class.forName("com.mysql.jdbc.Driver") ;} catch(ClassNotFoundException e) {System.out.println("找驱动程序类 ,加载驱动失败!");return; // or do something else}多年前写JDBC时年少无知,没有想过这个问题,今天题主...

weixin_36131257的博客 246

为什么使用反射加载数据库驱动

原文 https://blog.csdn.net/u010791823/article/details/69666431 来看看com.mysql.jdbc.Driver在初始化过程中究竟做了那些事。 static { try { // 放入到一个copyonwritearraylist中 java.sql.DriverManager...

zehuawong的博客 1872

反射

1、什么是反射 就是正在运行、动态获取某个类的所有信息 2、反射机制的应用场景 JDBC加载驱动 SpringIoc 框架 3、反射机制获取类的三种方式 //第一种方式: Class<?> classc1 = Class.forName("Employee"); //第二种方式: //java中每个类型都有class 属性. Class<?>...

南巷清风 153
上一篇: JAVA classpath和classpath*和配置文件路径的关系
下一篇: Django添加全文搜索功能入门篇
tenlee
博客等级 码龄15年 29粉丝 62原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值