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

Java新手求助:使用连接池与HTML无法从MySQL获取数据

解决Java从MySQL获取数据时连接等待但无数据的问题

嘿,作为Java新手遇到这种数据库查询卡住的情况太正常啦!我帮你结合截图里的信息分析下可能的问题,再给你具体的解决方案~

先从截图里找线索

从你提供的三个截图来看:

  • Java类(GetCompanyById):大概率是查询逻辑里有遗漏的关键步骤,或者SQL语句/参数处理出错;
  • HTML文件:要确认前端传递的查询参数是否正确;
  • 数据库表(companies):表结构看起来是正常的,有id、name等字段,那重点就放在Java代码的查询逻辑上。

具体排查与解决步骤

1. 先验证SQL语句的正确性

把你代码里生成的SQL语句,直接复制到MySQL客户端(比如Navicat、MySQL Workbench)里执行,看看能不能拿到结果:

  • 比如如果你的查询是按ID获取公司,那把语句换成SELECT * FROM companies WHERE id = 你的测试ID,执行后看有没有返回数据。
  • 如果直接执行都没数据,那要么是ID不存在,要么是表名/字段名写错了(注意MySQL默认是区分大小写的,比如你代码里写的是Company但实际表是companies就会出错)。

2. 确保正确处理ResultSet结果集

这是新手最容易踩的坑!默认情况下,ResultSet的游标是停在第一行数据之前的,必须调用rs.next()才能移动到第一条数据,否则根本取不到内容。示例代码如下:

// 假设你已经拿到了Connection和PreparedStatement
String sql = "SELECT id, name FROM companies WHERE id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, companyId); // 设置查询参数
ResultSet rs = ps.executeQuery();

// 关键步骤:调用rs.next()判断是否有数据
if (rs.next()) {
    // 读取字段值,注意字段名要和数据库里一致
    int id = rs.getInt("id");
    String name = rs.getString("name");
    System.out.println("查到公司:" + id + " - " + name);
} else {
    System.out.println("没有找到ID为" + companyId + "的公司");
}

3. 避免连接泄漏,用try-with-resources自动释放资源

连接处于等待状态,很可能是你用完数据库资源后没关闭,导致连接池里的连接被占满了。推荐用Java的try-with-resources语法,它会自动帮你关闭Connection、PreparedStatement、ResultSet,不用手动写close():

String url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC";
String user = "你的用户名";
String pwd = "你的密码";
int companyId = 1; // 假设要查询的ID

try (Connection conn = DriverManager.getConnection(url, user, pwd);
     PreparedStatement ps = conn.prepareStatement("SELECT * FROM companies WHERE id = ?")) {
    ps.setInt(1, companyId);
    try (ResultSet rs = ps.executeQuery()) {
        if (rs.next()) {
            // 处理你的数据
        }
    }
} catch (SQLException e) {
    // 打印异常信息,方便排查
    e.printStackTrace();
}

4. 检查前端传递的参数

从HTML文件来看,前端应该是通过某个方式(比如表单、AJAX)传递ID参数到Java后端。你可以在Java代码里先打印接收到的参数值,确认是不是正确的:

// 比如在接收参数的地方打印
System.out.println("前端传递的公司ID:" + companyId);

如果打印出来的ID和数据库里存在的ID不一致,那自然查不到数据;如果是类型不匹配(比如前端传了字符串,Java用int接收出错),也会导致查询异常。

小提示

新手调试的时候多打印日志,比如执行SQL前打印完整的SQL语句,执行后打印结果集的状态,这样能快速定位到是SQL的问题、参数的问题,还是结果集处理的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:03:58