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

JDBC Rowset连接MySQL报No suitable driver错误,已加驱动仍未解决

问题根因

该报错是JdbcRowSetImpl建立连接时无法加载MySQL驱动类导致的。JDBC4.0+之后虽然支持SPI自动注册驱动,但JdbcRowSet默认不会主动触发驱动类加载,之前能正常运行大概率是其他代码触发过驱动注册,后续环境变动后缺少触发条件就会抛出该错误。

可行解决方案

方案1:显式注册MySQL驱动

在初始化JdbcRowSet之前手动加载驱动类即可,根据你使用的Connector/J版本选择对应类名:

  • MySQL Connector/J 5.x版本驱动类:com.mysql.jdbc.Driver
  • MySQL Connector/J 8.x版本驱动类:com.mysql.cj.jdbc.Driver
    加载代码插在JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();行之前即可。

方案2:修正JDBC URL适配驱动要求

如果你使用的是8.x版本的Connector/J,需要在URL中补充时区等必要参数,避免驱动识别失败,修改后的URL示例:
jdbc:mysql://localhost:3306/student_manage?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
同时需要确认Connector/J版本与MySQL服务端版本匹配:MySQL 8.x服务端用Connector/J 8.0及以上版本,MySQL 5.7及以下服务端用Connector/J 5.1.49及以上版本。

方案3:排查运行时类路径配置

  • 如果你使用IDE开发,确认添加的MySQL驱动依赖是运行时生效,不是仅编译时依赖,很多场景下仅配置编译依赖会导致运行时找不到驱动类。
  • 如果你是打包后独立运行,确认Jar包已经把MySQL驱动打进去,或者运行时通过java -cp .:mysql-connector-java-xxx.jar question_3.JDBCRowset命令显式指定类路径。
修改后完整代码示例
package question_3;

import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetProvider;
public class JDBCRowset 
{
    public static void main(String[] args) throws Exception
    {
        // 手动加载MySQL驱动,5.x版本替换为com.mysql.jdbc.Driver
        Class.forName("com.mysql.cj.jdbc.Driver");
        try
        {
            JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
            String DATABASE_URL = "jdbc:mysql://localhost:3306/student_manage?useSSL=false&serverTimezone=Asia/Shanghai";
            String USERNAME = "root";
            String PASSWORD = "24121998";
            rowSet.setUrl(DATABASE_URL);
            rowSet.setUsername(USERNAME);
            rowSet.setPassword(PASSWORD);
            rowSet.setCommand("SELECT * FROM authors");
            rowSet.execute();
            
            ResultSetMetaData metaData = rowSet.getMetaData();
            int numberOfColumns = metaData.getColumnCount();
            System.out.printf("Authors Table : %n%n");
            
            for (int i = 1; i <= numberOfColumns; i++)
                System.out.printf("%-15s\t", metaData.getColumnName(i));
            System.out.println();
            
            while (rowSet.next())
             {
             for (int i = 1; i <= numberOfColumns; i++)
                  System.out.printf("%-15s\t",rowSet.getObject(i));
             System.out.println();
            }
        }
        catch (SQLException sqlException)
        {
           sqlException.printStackTrace();
           System.exit(1);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:39:03