You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java程序连接MySQL数据库时出现ClassNotFoundException报错求助

Java连接MySQL时ClassNotFoundException问题解决

错误信息(中文翻译)

Exception in thread "main" java.lang.NoClassDefFoundError: java/sql/Driver
    在 java.base/java.lang.ClassLoader.defineClass1(本地方法)
    在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
    在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
    在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
    在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
    在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    在 java.base/java.lang.Class.forName0(本地方法)
    在 java.base/java.lang.Class.forName(Class.java:375)
    在 hello/hello.world.main(world.java:8)
引起原因: java.lang.ClassNotFoundException: java.sql.Driver
    在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    ... 12 个更多异常

核心原因

JVM无法找到JDBC相关类或MySQL驱动类,常见触发场景:

  • 未引入对应版本的MySQL JDBC驱动包
  • JDK9+模块化环境下,未显式声明对java.sql或MySQL驱动模块的依赖

解决步骤

1. 引入MySQL JDBC驱动包

  • 普通Java项目:下载与MySQL版本匹配的驱动包(如mysql-connector-java-8.0.xx.jar),放入项目lib目录,在IDE中右键添加为库依赖。
  • Maven项目:在pom.xml中添加依赖(版本号根据你的MySQL版本调整):
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>
  • Gradle项目:在build.gradle中加入:
implementation 'mysql:mysql-connector-java:8.0.33'

2. 适配JDK9+模块化环境

如果项目使用模块化(存在module-info.java),需在其中声明依赖:

module hello {
    requires java.sql;
    requires mysql.connector.java;
}

非模块化项目可在JVM启动时添加参数:

--add-modules java.sql,mysql.connector.java

3. 修正驱动加载代码

MySQL 8.0+的驱动类名为com.mysql.cj.jdbc.Driver,且JDK6及以上无需手动调用Class.forName()加载驱动(JDBC会自动通过SPI机制加载)。若代码中仍使用旧驱动类名com.mysql.jdbc.Driver,建议替换为新类名,并确保驱动包版本与MySQL服务器版本兼容。

内容的提问来源于stack exchange,提问作者samadhan patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:33:31