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

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()加载。
修复步骤
  1. 修改JDBC连接URL,补全协议前缀,同时建议高版本MySQL连接追加常用参数避免额外报错:
// 原错误写法
// String url = "jdbc://localhost:3306/twitch";
// 修正后写法
String url = "jdbc:mysql://localhost:3306/twitch?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
  1. 删除或注释掉手动加载旧驱动的代码行,高版本驱动不需要手动加载,如果要保留加载逻辑,替换为新的驱动类即可:
// 直接注释掉这行即可,不需要手动加载
// Class.forName("com.mysql.jdbc.Driver");
  1. 建议把异常打印从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:24:24