Я пытаюсь создать приложение, в которое помещаются некоторые данные в базу данных и с html-страницы, которую я хочу найти в базе данных. Я использую сервлет api, я успешно извлекаю данные из базы данных, но для данных, которых нет в базе данных, я должен был получить сообщение «данные не найдены» на той же странице html. Я пишу условие для проверки данных для базы данных, но для данных, отсутствующих в базе данных, я получаю сообщение об ошибке «исключение нулевого указателя», и цикл while не разбивается сам по себе после проверки всех данных в базе данных.как разбить цикл while, если данные пользователя не найдены в базе данных
// this while loop doesn't terminate by itself if the data is not found in the database.
int flag=0;
while(rs.next()){
if (rs.getString(1).equals(fname)&&(rs.getString(2).equals(lname)))
{
String message=rs.getString(4);
out.print("<h2 align='center'>"+message+"</h2>");
RequestDispatcher disp = req.getRequestDispatcher("/index.html");
disp.include(req,res);
flag=1;
}
}
if(flag==0)
{
out.print("<h1>"+"data not found"+"</h1>");
RequestDispatcher disp = req.getRequestDispatcher("/index.html");
disp.include(req,res);
System.out.println(flag);
}
}
Используйте 'break' заявление? – Mena
как @Mena сказал, добавьте 'break;' после 'System.out.println (flag);' – Null
Вам не нужно разрывать цикл; если данных нет, то 'rs.next()' никогда не будет истинным. Если дополнительный '}' в вашем коде - это конец метода, вы можете просто захотеть вернуться после первого вызова disp.include, сделав флаг лишним. Если вы получаете NPE, то, возможно, одно из двух значений столбца, которое вы сравниваете в цикле, фактически равно null, для одной из строк (их может быть много)? Какую из строк указывает NPE? (Также - почему бы не добавить фильтр к вашему запросу, который ищет указанный fname/lname, вместо того, чтобы получать много данных, а затем проверять на Java?) –