P10 · 缺 MySQL 驱动 jar:ClassNotFoundException: com.mysql.cj.jdbc.Driver

P10 · 缺 MySQL 驱动 jar:ClassNotFoundException: com.mysql.cj.jdbc.Driver

场景还原:你兴冲冲地在项目里写了第一段 JDBC 连接代码,运行------啪:

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

翻译:"你要加载的 MySQL 驱动类,我翻遍了整个 classpath 都找不到。" 说白了:项目里根本没引入 MySQL 的驱动 jar 包

一、问题现象

复制代码
开始连接数据库,先加载驱动 ...
>>>> 加载驱动失败:找不到这个类!多半是没导入 mysql-connector jar
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:423)
	at MissingJarDemo.main(MissingJarDemo.java:8)

二、出错代码

java 复制代码
public class MissingJarDemo {
    public static void main(String[] args) {
        try {
            // MySQL 8 的驱动类全名
            Class.forName("com.mysql.cj.jdbc.Driver");   // ← 找不到这个类
            System.out.println("驱动加载成功,可以继续连接了");
        } catch (ClassNotFoundException e) {
            System.out.println(">>>> 加载驱动失败:找不到这个类!多半是没导入 mysql-connector jar");
            e.printStackTrace();
        }
    }
}

三、为什么会这样

Java 连接 MySQL 不是"天生就会"的------JDBC 只是个接口规范java.sql 包),真正干活的是驱动实现 :MySQL 官方提供的 mysql-connector-java(现在叫 mysql-connector-j)jar 包。

Class.forName("com.mysql.cj.jdbc.Driver") 的意思是"把驱动类加载进 JVM"。这个类住在驱动 jar 里,只有把 jar 加进项目的 classpath(依赖路径),JVM 才能找到它 。没加 jar → 找不到类 → ClassNotFoundException

顺带说明:MySQL 8 之后的驱动类名是 com.mysql.cj.jdbc.Driver;MySQL 5.x 时代的老驱动类名是 com.mysql.jdbc.Driver。类名写错(比如 8 的驱动用 5 的类名)也会报找不到------这种情况详见下一篇 P11。

四、怎么解决

方案一(最常用):用 Maven/Gradle 加依赖,一行搞定,自动下载:

xml 复制代码
<!-- pom.xml -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version>   <!-- 和你的 MySQL 服务端大版本匹配,8.x 就选 8.x -->
</dependency>
groovy 复制代码
// build.gradle
implementation 'com.mysql:mysql-connector-j:8.0.33'

方案二:手动下载 jar 放 lib 目录(不用构建工具的老项目):

  1. 去 Maven 中央仓库下载 mysql-connector-j-8.0.33.jar
  2. 放进项目的 lib/ 目录;
  3. 编译运行都带上它:
bash 复制代码
javac -encoding UTF-8 -cp lib/mysql-connector-j-8.0.33.jar YourClass.java
java  -cp .:lib/mysql-connector-j-8.0.33.jar YourClass

方案三:确认依赖真的"进来了"(IDEA 里依赖加了对不对):

  • Maven 项目:右侧 Maven 面板点刷新(Reload),看 External Libraries 里有没有 mysql-connector-j-x.x.x.jar
  • Gradle 项目同理刷新一下;
  • 命令行排查:mvn dependency:tree | grep mysql 看依赖是否解析成功。

五、防坑总结

  • 连 MySQL 前先确认驱动 jar 已在依赖里(ClassNotFoundException 几乎都是没引 jar);
  • MySQL 8+ 用 com.mysql.cj.jdbc.Driver + mysql-connector-j 8.x;别拿 5.x 的类名硬凑;
  • jar 版本和 MySQL 服务端版本大版本一致(8 对 8、5.7 对 5.x),见下一篇;
  • IDEA 加依赖后记得刷新 Maven/Gradle,External Libraries 里肉眼可见才算数;
  • 从零搭 JDBC 建议直接用连接池(HikariCP 等),驱动依赖会自动带好。

下一篇:P11 · MySQL 驱动版本过旧,连不上 MySQL 8(待发布)

相关推荐
pnoker1 小时前
从工业软件到 AI 智能体:工业 AIoT 技术路线的系统梳理
java·人工智能·物联网·microsoft·开源·工业互联网
专注仿真1 小时前
Vapor框架构建及Swift for TensorFlow图像分析
java·其他
逃逸线LOF1 小时前
Spring的AOP简介
java·后端·spring
砚底藏山河1 小时前
【量化纯GET实战 #21】用 pandas 做分析:把接口数据变成 DataFrame
java·python·金融·maven·pandas
Zzzzmo_2 小时前
Spring MVC
java·spring·mvc·cookie/session
cfm_29142 小时前
Spring核心设计模式
java·spring·设计模式
Java小白笔记2 小时前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
2333!!!!!2 小时前
rocket新手一些常见问题
java·开发语言
骇客野人2 小时前
Springboot 的 配置文件 application.yml 和 bootrap.yml 的由来和作用
java·spring boot·后端