How to determine if resultset is empty?

2019-08-01 07:14发布

问题:

Good day!

I am wondering how can I get the desired result in my if-else statement if i want to determine if my search is existing or not. I do various combinations as suggested in the previous questions related to this but still I cannot get what I want.

Code 1: I cannot reach the else statement if my search is empty...

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

Code 2: I cannot also reach the else statement where values searched should be displayed...

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

Code 3: Same result as Case 1:

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

I tried other combinations and still I cannot achieve the result I desired which is as follows: When the user search a value, if the resultset is null, an error message will appear, else if the search is not null, 1 or multiple searches will be displayed.

Kindly give me an alternative on how to this the easier way because it seems like I am doing it wrong.

Thank you in advance..

回答1:

in code 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);  

Or more appropriate way would be just set

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

and on 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:

One possible, though not very elegant, solution is

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

However, if you need to populate a list anyway, perhaps Jigar Joshi's solution would be better.



回答3:

Try this :

boolean searchEmpty = true;

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

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


回答4:

You can use ResultSet.getRow() which returns the number of rows and if it return zero than there are no products. And than you can carry out further operations.



回答5:

Use a scrollable ResultSet:

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

You can then call rs.beforeFirst() to move all the way back to the top of the resultset.



回答6:

  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");}


标签: java jsp jdbc