无法找到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
相关产品推荐
相关产品推荐

