2017-01-10 3 views
-2

Я пытаюсь создать приложение, в которое помещаются некоторые данные в базу данных и с 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);   
} 
} 
+2

Используйте 'break' заявление? – Mena

+0

как @Mena сказал, добавьте 'break;' после 'System.out.println (flag);' – Null

+1

Вам не нужно разрывать цикл; если данных нет, то 'rs.next()' никогда не будет истинным. Если дополнительный '}' в вашем коде - это конец метода, вы можете просто захотеть вернуться после первого вызова disp.include, сделав флаг лишним. Если вы получаете NPE, то, возможно, одно из двух значений столбца, которое вы сравниваете в цикле, фактически равно null, для одной из строк (их может быть много)? Какую из строк указывает NPE? (Также - почему бы не добавить фильтр к вашему запросу, который ищет указанный fname/lname, вместо того, чтобы получать много данных, а затем проверять на Java?) –

ответ

0

Вы должны присвоить значение переменной, то проверьте, не является нулевым первым:

String tmp = rs.getString(1); 
     if (tmp != null && tmp.equals(fname) && tmp.equals(lname)) {...} 
Смежные вопросы