2012-02-20 84 views
0

我正在創始檢查空結果的解決方案...這裏是代碼檢查空結果

 temp = rs1; 
    boolean hasRows = temp.next(); 


    if (hasRows) { 
     while (rs1.next()) { 
      String pid = rs1.getString("pid"); 
      System.out.println(pid); 
      String pd = rs1.getString("description"); 
      double price = rs1.getDouble("price");%> 
        <br> 
        Product id : <%=pid %><br> 
        Description : <%=pd %><br> 
        Price : <%=price %> 
     <% 
       } 
      } 

似乎temp.next()會影響rs.next(),結果不能打印最後。爲什麼?

+0

這是面向對象的。 'temp'引用與'rs'相同的'ResultSet'實例... – home 2012-02-20 08:28:39

+0

@home這與面向對象無關,只是'temp'和'rs1'引用同一個對象。對於OP,使用'while(rs1.hasNext()){...}'。 – kba 2012-02-20 09:09:18

+0

@Kristian Antonsen:它不一定與OO有關,但正如你所提到的,它指的是一個對象,我會調用指針或引用一個常見的OO原則。 – home 2012-02-20 09:18:06

回答

1

next()方法已經檢查您嘗試的控件。如果結果集rs1包含元素,則將輸入循環。 任何地方你都不會使用temp。爲什麼?放棄它,並把工作完成,試試這個:

 boolean loopEntered = false; 
     while (rs1.next()) 
     { 
       loopEntered = true; 
       String pid = rs1.getString("pid"); 
       System.out.println(pid); 
       String pd = rs1.getString("description"); 
       double price = rs1.getDouble("price"); 

       %> 
       <br> 
       Product id : <%=pid %><br> 
       Description : <%=pd %><br> 
       Price : <%=price %> 
       <% 
     } 

     if(!loopEntered) 
     // print your error messages. 
+0

但如果結果集爲空則如何打印「找不到產品」? – hkguile 2012-02-20 08:33:50

+0

「ResultSets」沒有'hasNext()'方法。相反,你可以在while循環中設置一個標誌。或者你保留'if(rs1.next())'並將while循環改爲'do ... while'。 – TPete 2012-02-20 08:45:53

+0

@TPete只需在循環結束後檢查它的空白即可。我改變了代碼。 – Juvanis 2012-02-20 08:54:21

1

我平時做這樣的

if(rs.next()){ 
    do {     
     //print product details 
    } while (rs.next()); 
}else{ 
    //print product not found 
}