【问题标题】:How to determine if resultset is empty?如何确定结果集是否为空?
【发布时间】:2011-07-12 14:47:54
【问题描述】:

美好的一天!

如果我想确定我的搜索是否存在,我想知道如何在我的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次或多次搜索。

请给我一个更简单的方法,因为我好像做错了。

提前谢谢你..

【问题讨论】:

    标签: java jsp jdbc


    【解决方案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");}
    

    【讨论】:

      【解决方案2】:

      在代码 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>
      

      【讨论】:

      • 根据我的发现 if (resultSet!= null) 总是评估为 true 并且(总是)进入 if 块。不要认为这是确定结果集是否为空的好方法。
      【解决方案3】:

      使用可滚动的ResultSet

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

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

      【讨论】:

      • Javadoc 说:“检索当前行号。第一行是数字 1,第二行是数字 2,依此类推。”
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        试试这个:

        boolean searchEmpty = true;
        
        while (resultSet.next()) {
          //create objects
          searchEmpty = false;
        }
        
        if (searchEmpty) {
         //set error message.
        }
        

        【讨论】:

          【解决方案6】:

          一个可能的,虽然不是很优雅的解决方案是

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

          但是,如果您仍然需要填充列表,也许 Jigar Joshi 的解决方案会更好。

          【讨论】:

            猜你喜欢
            • 2013-05-09
            • 2014-04-13
            • 2020-11-17
            • 2019-07-20
            • 2012-02-22
            • 2014-04-13
            • 1970-01-01
            相关资源
            最近更新 更多