0

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

运行良好的代码

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());

我不知道为什么它会在顶级版本而不是底部版本中循环。没有错误被抛出

4

2 回答 2

1

我的猜测是

pscore.add(new Parent(p));
String Score= getSegment(pscore);

执行一个数据库查询,替换rs在 getSegment 返回之前已完成的查询,因此下一次调用rs.next()将为 false。

为了避免这种情况,我会确保它rs是一个局部变量而不是一个字段。

如果是这种情况,最好的解决方案可能是使原始 SELECT 成为表之间的连接,以便拥有您需要的所有信息,而不是每行执行查询。

于 2012-10-18T11:05:14.703 回答
0

Keppils 的评论将我引向了答案

“也许 rs 在 getSegment() 方法中发生了什么事?”

我不知道如何给予任何信任我赞成评论但不能接受评论是正确的

父类使用静态变量进行数据库连接,因此在定义它时会覆盖 rs 变量。

于 2012-10-18T11:00:22.373 回答