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(待发布)

相关推荐
蛋蛋的就会顺顺的6 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8267 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡7 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
伯恩bourne9 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_9 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs10 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲10 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户212968352616810 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
helmsail10 小时前
05 管理活动与选品
java