You need to enable JavaScript to run this app. 如何获取MySQL字段所有字符串值?Java JDBC查询仅返回第一行求助
优惠活动
大模型
产品
解决方案
定价
更多

如何获取MySQL字段所有字符串值?Java JDBC查询仅返回第一行求助

问题定位与解决方法

核心Bug位置

你遇到的只返回第一行数据的问题,根源是return语句的书写位置错误:
在原代码的循环逻辑中,你将返回列表的语句写在了while(rs.next())的循环块内部:

while(rs.next()) {
    l.add(rs.getString("Name"));
    return l; // 错误:第一次循环读到第一行数据时,就直接触发返回终止方法
}

程序第一次进入循环、读取到表中第一条Name值并加入列表后,就会立刻执行return退出方法,完全不会继续遍历后续的数据库行,最终列表里只会存下第一行的值。

修正后可正常运行的代码

public List<String> getListItem() {
    // 提前初始化列表,避免异常时返回null
    List<String> l = new ArrayList<>();
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
        ps = Main.getPlugin().sql.getConnection().prepareStatement("SELECT Name FROM textures");
        rs = ps.executeQuery();
        
        while(rs.next()) {
            l.add(rs.getString("Name"));
        }
        // 等所有记录遍历完成后,再返回完整列表
        return l;
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 补充资源关闭逻辑,避免数据库连接泄漏
        try {
            if (rs != null) rs.close();
            if (ps != null) ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    // 异常时返回空集合,避免调用方遍历时触发空指针
    return Collections.emptyList();
}

额外优化说明

  • 原代码在出现SQL异常时会直接返回null,你的调用代码for (String a : utils.getListItem())碰到null值会直接抛出空指针异常,修改为返回空集合可以彻底规避这个问题
  • 补充的资源关闭逻辑可以避免SQL连接、语句对象长期不释放导致的连接池耗尽问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 19:36:10