2012-03-03 3 views
1

У меня есть метод, который принимает строковое значение в качестве параметра, а затем проверяет, существует ли это строковое значение в базе данных! Метод должен возвращать 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 

ответ

6

Что делать, если выполнение не переходит к утверждению if и/или в цикле? Для таких случаев нет возврата. Используйте возвращаемую логическую переменную или значение false. Просто добавьте оператор return false; после этой строки dBConnection.disconnect();, то есть после цикла while внутри оператора if вашего попробуйте блок, это будет сделано.

Кстати, я предлагаю вам использовать инструкцию о отключении базы данных в предложении finally, а не внутри блока try. Вероятно, что dBConnection.disconnect(); не будет выполнен, если ваш метод возвращает любое значение внутри цикла while. Переместить эту строку dBConnection.disconnect(); к окончательно блокировать только после того, как блока поймать, как это:

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

Что означает значение по умолчанию булевое? Спасибо – Xris

+0

@ Xris см. Мое редактирование, пожалуйста. – Juvanis

+0

Я по-прежнему получаю ту же ошибку при добавлении ** return false ** после цикла while! – Xris

1

Если если заявление, если (dBConnection.connect()) возвращает ложь, то нет возврата заявления для метода. Вы можете либо добавить заявление finally, либо просто добавить другое значение, если возвращаете нужное значение.

0

Пробуйте приведенный ниже код. Он должен решить вашу проблему:

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 
+0

Я был бы удивлен, если бы это произошло. Скомпилирует ли это? –

+0

Компиляция успешно завершена! –

+0

Ага, я вижу, вы исправили это. –

Смежные вопросы