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

JDBC连接MySQL报错无法查询获取表数据的排查与解决

JDBC连接MySQL报错排查

错误原因汇总

  • 驱动类过时警告:使用的是MySQL Connector/J 8.0及以上版本驱动,旧版驱动类com.mysql.jdbc.Driver已被标记废弃,官方推荐使用新驱动类com.mysql.cj.jdbc.Driver;同时高版本JDBC已支持SPI机制自动注册驱动,手动调用Class.forName()加载驱动属于冗余操作,无需额外编写。
  • 核心运行时异常根因:代码调用executeQuery方法时,传入的是带双引号的字符串字面量"query",而非提前定义好、存储了查询SQL语句的query变量。JDBC会把传入的"query"字符串直接作为SQL语句执行,这不是合法的查询语句,无法返回结果集,因此抛出Statement.executeQuery() cannot issue statements that do not produce result sets异常。
  • 潜在兼容问题:高版本MySQL连接如果不在URL中指定时区、关闭SSL校验等参数,大概率会出现时区不匹配、SSL连接警告等问题;原代码手动调用close()释放资源的写法,如果中间执行抛出异常,会导致数据库连接无法释放,引发资源泄漏。

修正后可运行代码

import java.sql.*;

public class JdbcDemo {
    public static class jdbcTest
    {
        public static void main(String[] args) throws Exception
        {
            // URL补充时区、字符集、SSL配置参数,避免高版本MySQL连接兼容问题
            String url = "jdbc:mysql://localhost:3306/coffee_db?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8";
            String uname = "Jeep";
            String pass = "random";
            String query = "select * from customers;";

            // 移除冗余的手动驱动加载逻辑
            // 使用try-with-resources语法自动释放连接、语句、结果集资源,无需手动调用close()
            try (Connection con = DriverManager.getConnection(url,uname,pass);
                 Statement st = con.createStatement();
                 ResultSet rs = st.executeQuery(query)) { // 去掉query的引号,传入存储SQL的变量本身

                while (rs.next()) {
                    String name = rs.getString("first_name");
                    System.out.println(name);
                }
            }
        }
    }
}

额外校验点

如果修正后仍无法运行,自行核对以下配置:

  • 数据库账号Jeep的密码是否正确,该账号是否有coffee_db库的查询权限
  • 本地3306端口的MySQL服务是否正常启动,coffee_db库、customers表是否存在,表中是否有first_name字段
  • 项目引入的MySQL驱动版本和本地安装的MySQL服务大版本匹配:MySQL 8.x对应引入8.0.x版本的Connector/J依赖,MySQL 5.x对应引入5.1.x版本的依赖

内容的提问来源于stack exchange,提问作者Jeet Kumar Pal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:27:27