如何获取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
相关产品推荐
相关产品推荐

