如何确定结果集是否为空?

时间:2011-03-10 10:29:51

标签: java jsp jdbc

美好的一天!

我想知道如果我想确定我的搜索是否存在,如何在if-else statement中获得所需的结果。我做了之前与之相关的问题所建议的各种组合,但我仍然无法得到我想要的东西。

代码1:如果我的搜索为空,我无法访问else语句...

        if (resultSet!= null) {
            while (resultSet.next()) {   //MULTIPLE VALUE SEARCH
                Product product = new Product();
                product.setProductId(resultSet.getInt("productId"));
                product.setProductName(resultSet.getString("productName"));
                productList.add(product);
            }
            request.setAttribute("productList", productList);
            RequestDispatcher rd = request.getRequestDispatcher("adminViewSearch.jsp");
            rd.forward(request, response);
        } else {
            request.setAttribute("message", "Search Failed"):
            RequestDispatcher rd = request.getRequestDispatcher("adminViewSearch.jsp");
            rd.forward(request, response);
        }

代码2:我也不能达到应该显示搜索值的else语句......

        if (!resultSet.next()) {
             .... Search Failed Message    
        } else { 
             while(result.next()){.....
        }

代码3:与案例1相同的结果:

        if (resultSet.wasNull()) {
             .... Search Failed Message    
        } else { 
             while(result.next()){.....
        }

我尝试了其他组合但仍然无法达到我想要的结果,如下所示: 当用户搜索某个值时,如果结果集为空,则会显示错误消息,否则如果搜索不为空,则会显示1个或多个搜索。

请给我一个关于如何更容易的方法,因为看起来我做错了。

提前谢谢..

6 个答案:

答案 0 :(得分:6)

一种可能的,但不是很优雅的解决方案是

if (!resultSet.next()) {
     .... Search Failed Message
} else {
    do {
        ...
    } while (resultSet.next());
}

但是,如果你需要填写一个列表,也许Jigar Joshi的解决方案会更好。

答案 1 :(得分:4)

代码1中的

    if(productList.size() == 0 ){
         request.setAttribute("message", "Search Failed"):        
    }else{
          request.setAttribute("productList", productList);             
    }

    RequestDispatcher rd = request.getRequestDispatcher("adminViewSearch.jsp");
    rd.forward(request, response);  

更合适的方式只需设置

    if (resultSet!= null) {
        while (resultSet.next()) { 
            Product product = new Product();
            product.setProductId(resultSet.getInt("productId"));
            product.setProductName(resultSet.getString("productName"));
            productList.add(product);
        }
        request.setAttribute("productList", productList);
        RequestDispatcher rd = request.getRequestDispatcher("adminViewSearch.jsp");
        rd.forward(request, response);
    }

jsp

<c:if test="${fn:length(companies) gt 0}">
   <!--display collection using c:foreach -->
</c:if>

<c:if test="${fn:length(companies) eq 0}">
   Search failed
</c:if>

答案 2 :(得分:2)

试试这个:

boolean searchEmpty = true;

while (resultSet.next()) {
  //create objects
  searchEmpty = false;
}

if (searchEmpty) {
 //set error message.
}

答案 3 :(得分:1)

使用可滚动的ResultSet

 Statement stmt= con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  
 ResultSet rs = stmt.executeQuery("SELECT a, b from TABLE2");

然后,您可以调用rs.beforeFirst()一直移回结果集的顶部。

答案 4 :(得分:1)

您可以使用ResultSet.getRow()返回行数,如果返回零则没有产品。而且你可以进行进一步的操作。

答案 5 :(得分:1)

  if(rs !=null)
   {
    if(rs.isBeforeFirst() && rs.isAfetrLast())
     {
     out.println("row is empty");
      }
     else
    {
     while(rs.next())
     {

   //execute your code 
   }
 }
 }
else{ out.println("row is null");}