【问题标题】:Compilation error :missing return statement编译错误:缺少返回语句
【发布时间】:2012-03-03 04:22:20
【问题描述】:

我有一个将字符串值作为参数的方法,然后检查该字符串值是否存在于数据库中!如果字符串值已经存在,该方法应该返回 true,否则返回 false!在我运行该方法之前,我得到一个编译错误“缺少返回语句”!有人在下面的代码中发现错误吗?

 public boolean checkID(String sid)
 {
    try 
    {
        String sessionID = null;
        if(dBConnection.connect())
        {
            Connection con = dBConnection.getConnection();
            String query = "SELECT sidvalue FROM sessionid where tokenvalue='" + sid + "'";
            Statement pstmt = con.createStatement();
            ResultSet resultset = pstmt.executeQuery(query);

            while (resultset.next())
            {
                sessionID = resultset.getString(1);
                if(sid.equalsIgnoreCase(sessionID))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            dBConnection.disconnect();     
        }//End of If statement

    }//End of Try block
    catch (Exception e)
    {
        System.out.println(e);
        return false;
    }
 }//End of method

【问题讨论】:

    标签: java compiler-errors


    【解决方案1】:

    如果执行没有传递到 if 语句和/或 while 循环怎么办?这种情况没有返回值。使用布尔变量或false 值返回。只需在 dBConnection.disconnect(); 这一行之后添加 return false; 语句,即在 try 块的 if 语句内的 while 循环之后,它就会完成。

    顺便说一句,我建议你在finally 子句中使用数据库断开语句,而不是在try 块中。如果您的方法在 while 循环内返回任何值,则很可能不会执行 dBConnection.disconnect();。将这一行 dBConnection.disconnect(); 移动到 catch 块之后的 finally 块,如下所示:

    try
    {
    ...
    }
    catch(Exception e)
    {
    ...
    }
    finally
    {
       dBConnection.disconnect();   
    }
    

    【讨论】:

    • 默认布尔值是什么意思?谢谢
    • 在 while 循环后添加 return false 时仍然出现相同的错误!
    • @Xris 请仔细检查我的答案。
    • 我移动了 dB.disconnect() 并且 return false;语句到 finally 块,不再有错误!我很感激!
    【解决方案2】:

    如果 if 语句 if(dBConnection.connect()) 返回 false,则该方法没有返回语句。您可以添加 finally 语句,也可以将 else 附加到 if 返回所需的值

    【讨论】:

      【解决方案3】:

      试试下面的代码。它应该可以解决您的问题:

      public boolean checkID(String sid) {
          try {
              String sessionID = null;
              if(dBConnection.connect()) {
                  Connection con = dBConnection.getConnection();
                  String query = "SELECT sidvalue FROM sessionid where tokenvalue='" + sid + "'";
                  Statement pstmt = con.createStatement();
                  ResultSet resultset = pstmt.executeQuery(query);
                  while (resultset.next()) {
                      sessionID = resultset.getString(1);
                      if(sid.equalsIgnoreCase(sessionID)) {
                          return true;
                      } else {
                          return false;
                      }
                  }        
              } else {
                   return false;
              }
          } catch (Exception e) {
              System.out.println(e);
              return false;
          }
      
          finally {
              dBConnection.disconnect();     
          }
      }//End of method
      

      【讨论】:

      • 如果确实如此,我会感到惊讶。这可以编译吗?
      • 编译成功!
      猜你喜欢
      • 2014-08-20
      • 2013-10-27
      • 2015-06-01
      • 1970-01-01
      • 2013-04-27
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      相关资源
      最近更新 更多