2016-03-08 4 views
1

В нижеприведенном фрагменте всегда вызывается else. if никогда не вводится, хотя блок while успешно введен.if (rs.next()) блок, размещенный после этого (rs.next()) никогда не вводится

while (rs.next()) { 

    username = rs.getString(2); 
    password = rs.getString(3); 

} 
if(rs.next()) 
{ 
    response.sendRedirect("Welcome.jsp"); 

}   
else { 
    response.sendRedirect("Fail.jsp"); 
} 

Как это обусловлено и как его решить?

+0

В чем проблема? – jdabrowski

+0

Я установил правильное имя пользователя и пароль, и я получил перенаправление на fail.jsp вместо welcome.jsp – JohnnySparow

+0

Это опасный код. Вы открываете соединение в методе 'init()' и никогда не закрываете его. Соединения обычно получаются и возвращаются в пределах запроса/ответа –

ответ

1

Что вы, возможно, хотели:

if(rs.next()) { 
    username = rs.getString(2); 
    password = rs.getString(3); 
    response.sendRedirect("Welcome.jsp"); 
} else { 
    response.sendRedirect("Fail.jsp"); 
} 
+0

Спасибо, вы решили проблему – JohnnySparow

0

Посмотри документацию next() метода результирующего here.

При вызове метода next возвращает ложь, курсор позиционируется после последней строки.

Итак, когда управление выходит из цикла while, курсор уже достиг позиции после последней строки и, следовательно, rs.next() никогда не вернет true. Я пустошь хотел бы предложить несколько изменений:

  • Добавить флаг в то время цикла, который устанавливается истина управления входит внутрь во время цикла, а затем проверить, что флаг, например:

    boolean exists = false; while(rs.next(){ exists = true; //other logic } if(exists){ response.sendRedirect("Welcome.jsp"); }

  • Добавить код exception handling в код.

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