2015-07-02 9 views
2

Я создаю графический интерфейс, в котором пользователь вводит любое имя фильма. Если в базе данных есть этот фильм, то он появляется на консоли ide, если нет, тогда отображается сообщение. Теперь программа дает правильный вывод на ide консоль, когда пользователь вводит какой-либо связанный фильм, который находится в базе данных. Но проблема заключается в том, что при вводе какого-либо неправильного имени фильма, которого нет в базе данных, тогда программа ничего не делает. Я хочу дать сообщение JOptionPane, когда ничего не найдено из базы данных просто например

enter image description hereJava Как добавить сообщения JOptionPane по методу

И когда данные найдены.

enter image description here

Но я не знаю, как это сделать.
Код:

public class Find extends JFrame{ 

    private JLabel keyword; 
    private JTextField tx; 
    private JComboBox box; 

    private Connection conn; 
    private PreparedStatement pre; 
    private ResultSet set; 
    private ResultSetMetaData meta; 

    String server = "jdbc:mysql://localhost/demo"; 
    String user="root"; 
    String pass="pass"; 



    public Find(){ 
     super("Frame"); 
     getContentPane().setLayout(null); 


     keyword= new JLabel("Keyword"); 
     keyword.setBounds(170, 100, 96, 37); 
     getContentPane().add(keyword); 


     box = new JComboBox(); 
     box.setModel(new DefaultComboBoxModel(new String[] {"Title"})); 
     box.setBounds(42, 139, 63, 20); 
     getContentPane().add(box); 


     //textfield 
       tx= new JTextField(); 
       tx.addKeyListener(new KeyAdapter() { 
        public void keyReleased(KeyEvent arg0) { 


        try{ 

         conn=DriverManager.getConnection(server,user,pass); 

      String option = (String) box.getSelectedItem(); 
      String query = "select title,year from movies where "+option+"=?"; 
          //statement 
       pre  = conn.prepareStatement(query);      


       pre.setString(1, tx.getText()); 



       set= pre.executeQuery(); 



       ResultSetMetaData meta = set.getMetaData(); 


       int totalcolumn=meta.getColumnCount(); 



       while(set.next()){ 

         for(int i=1;i<=totalcolumn;i++){ 

          System.out.printf("%-8s\t", set.getObject(i)); 


         } 

         System.out.println();   

        } 

        } 
        catch(Exception e1){ 

         JOptionPane.showMessageDialog(null, e1.getMessage()); 
        } 



        } 
       }); 
       tx.setBounds(120, 136, 202, 27); 
       getContentPane().add(tx); 




     setSize(450,450); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     setResizable(false); 
     setVisible(true); 
    } 
} 

Главная

public class FindMain { 

    public static void main(String[] args) { 


     Find ooper = new Find(); 

    } 

} 
+0

Что именно это ваш вопрос? Кроме того, форматирование кода лучше привлечет больше помощи – BoDidely

+0

@BoDidely теперь я исправляю свой вопрос – hamel123

ответ

1

Вы хотите проверить, если ваш запрос возвращает пустой ResultSet. Метод isBeforeFirst() возвращает ложь, если курсор не находится перед первой строкой или если множество не содержит ни одной строки

if (!set.isBeforeFirst()) {  
    //Here you can display your 'failure' JOptionPane 
} 
else { 
    //Here you can put your code that handles your set, including your 'success' JOptionPane 
} 

Например, я хотел бы предложить это изменение:

... 
    set = pre.executeQuery(); 
    if (!set.isBeforeFirst()){ 
     JOptionPane.showMessageDialog(null, "The record was not found."); 
    } 
    else{ 
     ResultSetMetaData meta = set.getMetaData(); 
     int totalcolumn=meta.getColumnCount(); 
     while(set.next()){ 
      for(int i=1;i<=totalcolumn;i++){ 
       System.out.printf("%-8s\t", set.getObject(i)); 
      } 
      System.out.println();   
     } 
    } 
} 
catch(Exception e1){ 
... 
+0

, но это дает ошибку при каждом нажатии клавиши – hamel123

+0

Вы уверены, что добавили код в нужном разделе? Какое исключение? – BoDidely

+0

«Ошибка не найдена» Приходит, когда тип – hamel123

1

set.getObject (ColumnIndex) возвращает нулевое значение, если результат выполнения запроса SQL является NULL. Но прежде чем попасть туда, проверьте, есть ли у набора какие-либо элементы.

Попробуйте следующее:

ResultSetMetaData meta = set.getMetaData(); 

int totalcolumn = meta.getColumnCount(); 

if (!set.next()) { 
     JOptionPane.showMessageDialog(null, "No data"); 
} else { 
     do { 
      for(int i = 1; i <= totalcolumn; i++) { 
       System.out.printf("%-8s\t", set.getObject(i)); 
      } 

      System.out.println(); 
     } while(set.next()); 
} 
+0

где добавить этот код в программу – hamel123

+0

Проверьте, есть ли у вас какие-либо элементы, возвращаемые из запроса, после чего вы можете продолжить печать результатов. Если результатов нет, просто покажите свое всплывающее окно. – Andrei

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