2012-02-20 87 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 
}