将代码添加到循环中时,Java 循环不循环

标签 java

我很困惑,因为当我在循环内添加代码时,它会停止循环(在第一轮后有效结束)。

代码运行良好

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/

相关文章:

Java:如何对待泛型异构容器?

java - 将欢迎页面重定向到 servlet 容器中另一个域中的页面?

java - 从内部存储读取时,BitmapFactory.decodeStream 返回 null

java - 如何清除 spring 中的 ehcache 对象以编程方式配置 java 项目

java - Java 中的字符串到 JSONArray

java - Redis/Jedis - 按模式删除?

Java:守护进程:thread.join() 未完成,之前在一个线程中抛出异常

java - 如何在 Spring Boot 应用程序中测试 Quartz 作业的正常工作

java - Facebook 登录无法正常工作(解析)

java - 使用 REST 服务发送具有任意键值的 JSON (Jersey/Jackson)