我很困惑,因为当我在循环内添加代码时,它会停止循环(在第一轮后有效结束)。
代码运行良好
StringBuilder sb = new StringBuilder(4096);
while ((rs.next())) {
System.err.println(rs.getRow());
sb.append(rs.getString(1)).append(",");
}
writeToCell(sheet,"P",row.getRowNum()+1,sb.toString());
不循环的代码
StringBuilder sb = new StringBuilder(4096);
while ((rs.next())) {
System.err.println(rs.getRow());
String p=rs.getString(1);
ArrayList<Parent> pscore = new ArrayList();
pscore.add(new Parent(p));
String Score= getSegment(pscore);
sb.append(p).append("(").append(Score).append("),");
}
writeToCell(sheet,"P",row.getRowNum()+1,sb.toString());
我不明白为什么它会在顶部版本而不是底部版本中循环。没有抛出任何错误
最佳答案
我的猜测是
pscore.add(new Parent(p));
String Score= getSegment(pscore);
执行数据库查询,替换在 getSegment 返回之前完成的 rs
,因此下一次调用 rs.next()
将为 false。
为了避免这种情况,我将确保 rs
是局部变量而不是字段。
如果是这种情况,最好的解决方案可能是使原始 SELECT 成为表之间的联接,以便它具有您需要的所有信息,而不是每行执行查询。
关于将代码添加到循环中时,Java 循环不循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12952815/