Java如何查询MySQL中指定颜色对应所有ID并转为数组
MySQL多匹配结果的全量ID获取与数组转换实现
现有代码缺陷
当前实现只通过单次rs.next()判断就读取第一条匹配记录直接返回,缺少遍历结果集所有行的逻辑,因此只能拿到单条匹配的ID,无法满足多结果查询需求。
修正实现要点
- 初始化可变长度集合存储匹配到的ID,避免固定长度数组的容量溢出问题
- 将原本判断单条结果的
if (rs.next())替换为while循环,逐行扫描结果集中的所有匹配记录 - 遍历完成后将集合转换为目标类型的数组
- 在
finally块中关闭ResultSet、PreparedStatement等JDBC资源,避免连接泄漏
适配现有代码的实现示例
List<Integer> matchedIds = new ArrayList<>(); try { PreparedStatement ps = plugin.SQL.getConnection().prepareStatement("SELECT ID FROM playerinfo WHERE COLOUR = ?"); ps.setString(1, colour); ResultSet rs = ps.executeQuery(); // 循环读取所有匹配行,而非仅获取第一行 while (rs.next()) { int currentId = rs.getInt("ID"); matchedIds.add(currentId); } } catch (SQLException e) { e.printStackTrace(); } finally { // 补充资源关闭逻辑,避免资源泄漏 // rs.close(); // ps.close(); } // 将List转换为int数组,满足多结果集转数组的需求 int[] idArray = matchedIds.stream().mapToInt(Integer::intValue).toArray(); return idArray;
对应样例数据的实际效果:当查询条件颜色为
red时,最终得到的数组为[1, 4, 5],完整覆盖表中所有匹配颜色的ID。
内容的提问来源于stack exchange,提问作者UberSuperBoss
相关产品推荐
相关产品推荐

