咨询:如何将数据库contact列值提取至数组?现有代码问题排查
问题分析与解决
嘿,我一眼就看到问题所在啦!你把打印列表的语句放在了while循环内部,导致每往列表里添加一个contact值,就会把当前的整个列表完整打印一次,所以才会出现[0547615632]之后跟着更长列表的重复输出。
接下来给你几个优化和修复的点:
- 调整打印位置:把
System.out.println(l);移到while循环外面,等所有contact数据都读取并添加到列表后,再一次性打印完整的结果。 - 优化SQL查询:既然你只需要
contact列的数据,完全没必要用select *,改成select contact from members可以减少数据库返回的数据量,提升查询效率。 - 完善异常处理:你现在的
e.getMessage()只是获取异常消息但没有输出,换成e.printStackTrace()能打印完整的异常栈信息,方便后续排查问题。 - 资源自动关闭:使用Java 7+支持的
try-with-resources语法,自动关闭PreparedStatement和ResultSet,避免数据库资源泄漏。
修改后的完整代码如下:
List<String> l = new ArrayList<>(); try (PreparedStatement pst = conn.prepareStatement("select contact from members"); ResultSet rs = pst.executeQuery()) { while (rs.next()) { String con = rs.getString("contact"); l.add(con); } // 循环结束后打印完整列表 System.out.println(l); } catch (Exception e) { // 打印完整异常信息便于排查 e.printStackTrace(); }
这样修改后,运行就能得到只包含所有contact值的完整列表啦~
内容的提问来源于stack exchange,提问作者Rodney Nart
相关产品推荐
相关产品推荐

