2012-10-18 113 views
0

當我在循環中添加代碼時停止循環(在第一輪之後有效地結束),我感到困惑。這是工作的罰款當代碼被添加到循環時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()); 

我無法弄清楚,爲什麼它會循環的前版本,而不是底部的版本。不會引發任何錯誤

+2

例外?誰知道.... – duffymo

+1

等待等待等待..什麼是不工作?輸出是什麼?你期望什麼? –

+2

'getSegment()'方法中'rs'可能發生了什麼? – Keppil

回答

1

我的猜測是,

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

執行數據庫查詢它取代已經完成getSegment返回所以rs.next()下一個電話將是假的前rs

爲了避免這種情況,我會確保rs是一個局部變量而不是一個字段。

如果是這種情況,最好的解決方案可能是使原始SELECT成爲表格之間的聯接,以便獲得所需的所有信息,而不是每行執行查詢。

0

Keppils評論把我對答案

「也許有事RS在getSegment()方法?」

林不知道如何給予任何信貸IVE upvoted的評論,但不能接受評論爲正確

父類使用靜態變量的數據庫連接,所以當它的定義它重寫rs變量。