Отображение диалогового окна сообщения в неподходящее время

#java

#java

Вопрос:

У меня есть форма поиска. В этом я ищу имя в алфавитном порядке, когда я ввожу алфавит в текстовое поле, и если в моей базе данных есть какое-либо имя из этого алфавита, то оно показывает сообщение о том, что запись найдена (при нажатии кнопки поиска), но когда я ввожу букву, в которой нет имени, начинающегося с этой буквы, даже появляется сообщение «запись найдена».

Мой код:

 if(searchby.equals("Name"))

        {
             try
            {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            System.out.println("n Driver loaded");
            Connection con=DriverManager.getConnection("jdbc:odbc:wanisamajDB");

             Statement stmt=con.createStatement();



            ResultSet rs = stmt.executeQuery("SELECT * FROM FAMILYcensus WHERE Name LIKE '"  tfsearch.getText() "%'ORDER BY Name ASC");

             StringBuilder sb = new StringBuilder();
             while (rs.next()) {

             String name = rs.getString("Name");
             sb.append(name   System.getProperty("line.separator") );
             }
             String names = sb.toString().trim();


           JOptionPane.showMessageDialog(null, "RECORD FOUND");
           con.close();
           tasearch.setText(names);


           //con.close();

         }
            catch(SQLException eM)
          {
            JOptionPane.showMessageDialog(null,"INVALID RECORD");
           }
          catch(Exception et)
           {
             System.out.println("error:" et.getMessage());
            }  
  

Комментарии:

1. Судя по вашему предыдущему и текущему вопросу, вам следует изучить базовый поток работы программы. Доступно множество руководств и bools, и я действительно рекомендую вам воспользоваться одним или двумя. Что касается вашего вопроса — вы не вернулись из своего метода ни на одном шаге, поэтому Java все равно выполнит эту строку.

Ответ №1:

Ваш код не проверяет, rs является ли оно пустым, и не настраивает все так, как если бы поиск не удался, перед повторением rs . Пустой результат из SELECT не создает исключения.

Если в RecordSet ничего нет, то вам следует сделать с вашей формой все, что вы хотите сделать, чтобы указать, что записи не были найдены.

Ответ №2:

Ну, вы никогда не проверяете, вернул ли ваш запрос что-нибудь или нет.

Сделайте это и действуйте соответственно, когда результатов нет.

Редактировать: MByD делает действительно хороший вывод в своем прямом комментарии к вашему вопросу. Похоже, вы не понимаете основных концепций «Если — то — еще», учитывая вопросы, которые вы публикуете на SO. Копирование и вставка кода из примеров без понимания того, что вы делаете, может оказаться не лучшим способом для вас научиться программировать. Хорошее базовое введение в книгу по программированию может стать ценным вложением средств.

Ответ №3:

Похоже, что если не будет создано исключение, вы получите это сообщение. Может быть, протестируйте это как

 if(sb.length()==0) JOptionPane.showMessageDialog(null, "NO RECORD FOUND");
else JOptionPane.showMessageDialog(null, "RECORD FOUND");