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

IntelliJ连接MySQL时遭遇ClassNotFoundException问题求助

解决java.lang.ClassNotFoundException: com.mysql.jdbc.Connection的问题

嘿,我一眼就发现你代码里的关键问题啦!咱们一步步来解决:

1. 核心错误:驱动类名写错了

你在Class.forName()里传入的com.mysql.jdbc.Connection是JDBC连接接口的全类名,不是MySQL驱动类的全类名

针对你用的MySQL Connector/J 8.0.172(8.0.x版本),正确的驱动类名是:

Class.forName("com.mysql.cj.jdbc.Driver");

另外补充个小知识点:MySQL 8.0之后的驱动已经支持SPI自动加载,所以你甚至可以直接删掉Class.forName()这一行,DriverManager会自动找到并加载驱动类。

2. 再次确认依赖配置(避免踩坑)

虽然你说已经添加了mysql-connector库,但还是建议再检查下:

  • 如果是手动添加jar包:打开IntelliJ的File → Project Structure → Modules → 你的模块 → Dependencies,确认mysql-connector-java-8.0.172.jar在列表中,且没有红叉(表示依赖有效)。
  • 如果用Maven/Gradle管理:确保依赖配置正确,比如Maven的依赖块应该是:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.172</version>
</dependency>

3. 优化连接URL(避免额外问题)

MySQL 8.0版本建议在连接URL中添加时区参数,否则可能出现时区相关的警告或错误,比如:

String url = "jdbc:mysql://localhost:3306/lsmotor_local_oltp?useSSL=false&serverTimezone=UTC";
localConnection = DriverManager.getConnection(url, user, password);

修正后的完整代码示例

public void copyDatabase(Info info){
    Connection localConnection = null; // 建议在方法内声明,避免成员变量泄漏
    try{
        // MySQL 8.0+ 可省略此行,如需保留请用正确的驱动类名
        Class.forName("com.mysql.cj.jdbc.Driver");
        localConnection = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/lsmotor_local_oltp?useSSL=false&serverTimezone=UTC", 
            user, 
            password
        );
        // TODO: Copy Info into local database
    } catch(SQLException e){
        System.out.println("Problem while trying to connect to local database");
        e.printStackTrace(); // 打印堆栈信息,方便排查具体错误(比如密码错、数据库不存在等)
    } catch(ClassNotFoundException e){
        System.out.println("Failed to load MySQL driver");
        e.printStackTrace();
    } finally {
        // 务必关闭连接,防止资源泄漏
        if(localConnection != null){
            try {
                localConnection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Roux Casas

火山引擎 最新活动