Java连接MySQL出现No suitable driver found报错原因咨询
问题根因
报错由两个问题共同导致:
- 核心错误是JDBC连接URL格式写错:MySQL官方驱动识别的URL前缀为
jdbc:mysql://,你的代码里写的是jdbc://localhost:3306/twitch,缺失了mysql:协议标识,驱动判定该URL不属于自己的处理范围,直接抛出No suitable driver found异常,和你是否正确导入驱动包无关。 - 次要问题是驱动类加载写法过时:你代码里加载的
com.mysql.jdbc.Driver是MySQL Connector/J 5.x及更早版本的驱动类,6.0以上版本的新驱动类为com.mysql.cj.jdbc.Driver,且高版本驱动已经通过SPI实现自动注册,不需要手动调用Class.forName()加载。
修复步骤
- 修改JDBC连接URL,补全协议前缀,同时建议高版本MySQL连接追加常用参数避免额外报错:
// 原错误写法 // String url = "jdbc://localhost:3306/twitch"; // 修正后写法 String url = "jdbc:mysql://localhost:3306/twitch?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
- 删除或注释掉手动加载旧驱动的代码行,高版本驱动不需要手动加载,如果要保留加载逻辑,替换为新的驱动类即可:
// 直接注释掉这行即可,不需要手动加载 // Class.forName("com.mysql.jdbc.Driver");
- 建议把异常打印从
System.out.println(e)改成e.printStackTrace(),后续如果出现其他连接问题可以看到完整错误栈,方便定位。
修正后完整代码
import java.sql.*; public class App { public static void main(String[] args) throws Exception { try { String url = "jdbc:mysql://localhost:3306/twitch?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"; String username = "root"; String pass = "nfreal-yt10"; Connection con=DriverManager.getConnection(url,username,pass); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("select distinct creator_id from twitch.information where creator_id > 40;"); while (rs.next()) { System.out.println(rs.getString(1)); } con.close(); } catch(Exception e) { e.printStackTrace(); } } }
补充说明:如果修改后仍连接失败,检查你导入的MySQL Connector/J版本和本地安装的MySQL服务大版本是否匹配,MySQL 8.x服务对应使用8.0.x版本的驱动包,MySQL 5.x服务对应使用5.1.x版本的驱动包即可。
内容的提问来源于stack exchange,提问作者user19132496
相关产品推荐
相关产品推荐

