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

无法找到Connector J,JDBC连接MySQL数据库报错求助

MySQL数据库连接异常排查与解决

问题概述

  • 执行Class.forName("com.mysql.jdbc.Driver")时抛出java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,已在NetBeans中安装Connector J依赖库。
  • 移除Class.forName代码后,出现新异常:java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test_schema。
  • NetBeans可正常连接目标数据库查看数据,但代码运行报错。

提供的代码

主类代码

import java.sql.SQLException;

public class Mavenproject2 {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        
        try{
             Class.forName("com.mysql.jdbc.Driver").getDeclaredConstructor().newInstance();
             System.out.println("Connection succesfull!");
         }
         catch(Exception ex){
             System.out.println("Connection failed...");
              
             System.out.println(ex);
         }
        
        //DBHandler dbh = new DBHandler();
        //dbh.signUser("Andrei", "Ker", "test", "123456789");
    }
}

DBHandler类代码

import java.sql.Connection;
import java.sql.DriverAction;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DBHandler extends Configs {

    Connection dbCon;

    public Connection getDbConnection() throws ClassNotFoundException, SQLException {
        String connectionString = "jdbc:mysql://" + dbHost + ":"
                + Port + "/" + Name;
        //Class.forName("com.mysql.cj.jdbc.Driver");

        dbCon = DriverManager.getConnection(connectionString, User, Pass);
        return dbCon;
    }

    public void signUser(String name, String surename, String login, String pass) throws SQLException, ClassNotFoundException {
        String insert = "INSERT INTO " + Const.USER_TABLE + "(" + Const.USER_FIRSTNAME+")"+"VALUES(?)");
        PreparedStatement ps = getDbConnection().prepareStatement(insert);
        ps.setString(1, name);
        ps.executeUpdate();
    }
}

解决方法

1. 匹配驱动版本与类名

MySQL Connector/J 8.0及以上版本的驱动类名为com.mysql.cj.jdbc.Driver,旧版本才用com.mysql.jdbc.Driver。你的DBHandler中注释了新版类名,说明大概率用的是8.0+版本,主类仍用旧类名是首次报错的核心原因。

2. 确保驱动在运行时类路径中

NetBeans中“安装Connector J”不等于驱动被加入项目运行时类路径:

  • 若为Maven项目:直接在pom.xml中添加依赖,避免手动添加jar包导致类路径不一致:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version> <!-- 替换为你实际使用的版本号 -->
</dependency>
  • 若为非Maven项目:右键项目→属性→库→运行时,确认Connector J的jar包已添加至运行时库(而非仅编译时)。

3. 修复连接字符串(适配8.0+版本)

MySQL 8.0+版本建议在连接字符串中添加时区参数,避免时区错误:

String connectionString = "jdbc:mysql://" + dbHost + ":" + Port + "/" + Name + "?useSSL=false&serverTimezone=UTC";

4. 代码修正

  • JDBC 4.0及以上版本无需手动调用Class.forName,驱动会自动加载(前提是驱动在类路径中)。
  • 修复DBHandler中signUser方法的SQL语法错误:末尾多了一个括号,正确语句为:
String insert = "INSERT INTO " + Const.USER_TABLE + "(" + Const.USER_FIRSTNAME + ") VALUES(?)";

5. 验证驱动加载状态

可在代码中添加以下代码,确认驱动是否已正确加载:

Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
    Driver driver = drivers.nextElement();
    System.out.println("已加载驱动: " + driver.getClass().getName());
}

如果未输出com.mysql.cj.jdbc.Driver,说明驱动未在类路径中,需重新配置。


内容的提问来源于stack exchange,提问作者Andrei Kernazhytski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:12:21