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 目录(不用构建工具的老项目):
- 去 Maven 中央仓库下载
mysql-connector-j-8.0.33.jar; - 放进项目的
lib/目录; - 编译运行都带上它:
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-j8.x;别拿 5.x 的类名硬凑; - jar 版本和 MySQL 服务端版本大版本一致(8 对 8、5.7 对 5.x),见下一篇;
- IDEA 加依赖后记得刷新 Maven/Gradle,
External Libraries里肉眼可见才算数; - 从零搭 JDBC 建议直接用连接池(HikariCP 等),驱动依赖会自动带好。
下一篇:P11 · MySQL 驱动版本过旧,连不上 MySQL 8(待发布)