You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java连接MySQL时Driver未找到及ClassNotFoundException问题求助

解决MySQL驱动找不到的问题(ClassNotFoundException)

我一眼就看出你踩了MySQL Connector/J版本变更的坑,这是Java连MySQL时很常见的问题,我来一步步帮你搞定:

问题根源

你现在遇到的java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver,本质是代码里写的Driver类名和你实际用的驱动版本不匹配

  • MySQL Connector/J 5.x版本的Driver类是com.mysql.jdbc.Driver
  • 8.0及以上版本的Driver类已经改成了com.mysql.cj.jdbc.Driver,同时还要求JDBC URL必须指定时区参数

具体解决方案

1. 先确认你的驱动版本

去看你Maven pom.xml里的依赖版本:

  • 如果是8.0+(比如8.0.33),用新的Driver类名+带时区的URL
  • 如果是5.x(比如5.1.49),用旧的Driver类名即可

2. 修正代码中的Driver类名

  • 若用8.0+驱动,把Class.forName("com.mysql.jdbc.Driver");改成:
    Class.forName("com.mysql.cj.jdbc.Driver");
    
  • 另外提一句:从JDBC 4.0开始,只要驱动在类路径里,Class.forName()其实可以省略,但保留也没问题,只要类名正确就行

3. 补充JDBC URL的时区参数(仅8.0+驱动需要)

8.0+版本必须指定时区,不然会抛出时区相关的错误,比如把URL改成:

String url = "jdbc:mysql://" + host + ":" + port + "/" + database + "?serverTimezone=UTC";

国内用户可以换成serverTimezone=Asia/Shanghai更合适

4. 完善代码细节

你的代码里database变量是空的,记得填上实际的数据库名称;password也要对应你的MySQL root密码。这里给你一个修正后的完整代码示例(基于8.0+驱动):

package com.CloudyProductions.GCDSS;
import java.sql.*;

public class mysql {
    public static Connection c;
    static String host = "localhost";
    static String port = "3306";
    static String database = "your_database_name"; // 替换成你的数据库名
    static String username = "root";
    static String password = "your_root_password"; // 替换成你的密码
    static String timezone = "Asia/Shanghai"; // 按需调整时区

    public static void connect() {
        try {
            // 8.0+驱动对应的Driver类
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = String.format("jdbc:mysql://%s:%s/%s?serverTimezone=%s",
                                      host, port, database, timezone);
            c = DriverManager.getConnection(url, username, password);
            System.out.println("数据库连接成功!");
        } catch (ClassNotFoundException e) {
            System.err.println("错误:找不到MySQL驱动类,请检查驱动版本和类名是否匹配");
            e.printStackTrace();
        } catch (SQLException e) {
            System.err.println("错误:数据库连接失败,请检查URL、用户名、密码或目标数据库是否存在");
            e.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

5. 确保Maven依赖正确加载

如果是8.0+版本,pom.xml里的依赖应该是这样的:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

执行mvn clean install让Maven重新下载依赖,确保驱动jar被正确引入到项目中。要是你需要打包成独立jar运行,记得用maven-shade-plugin这类插件把驱动jar包含进去,避免运行时又找不到类。


内容的提问来源于stack exchange,提问作者Cloudy Productions

火山引擎 最新活动