Przeszukiwanie bazy SQL w Javie

0

Hej!

Kolejny temat z rodziny jestem noobem i siadłem na podstawach :D ale, że ludzkość to gatunek stadny, więc piszę z prośbą o pomoc.

Mam JTextField, JButton'a i JTable, która notabene łączy się z bazą SQL. W JTextField wpisuję zapytanie o jakiś record z bazy, a JButtonem wykonuję akcję przeszukiwawczą. Jeżeli znalazły się jakieś recordy w bazie, to następuje "refresh" tabeli i pokazuje wiersze zawierające słowo z JTextField.

Wszystko pięknie działa, ale jest jedna rzecz, którą chciałbym dodać i mi to nie wychodzi :D mianowicie przy nieistnieniu recordu, o który pytamy oczywiście JTable nie wyświetla żadnych wierszy. Chciałbym jednak, by w przypadku, gdy recordy, o które pytamy nie istnieją, to JTable się nie refreshuje i wyświetla się np. JOptionPane z informacją o braku recordu, o który pytamy.

Próbowałem bawić się trochę if, else, ale problem jest tego typu, że jak umieszczę wyrażenie sterujące while(rs.next()) pod if(rs.next(), to przy np. istnieniu 5 recordów pasujących do zapytania wyświetli się tylko jeden. Zastanawiam się jak to obejść, ale jak do tej pory jeszcze nie znalazłem rozwiązania.

Poniżej przedstawiam kod całej akcji spod JButtona.

Będę ogromnie wdzięczny za pomoc!

Pozdrawiam serdecznie :)

JButton btnSearch = new JButton("");
btnSearch.addActionListener(new ActionListener() 
{
   public void actionPerformed(ActionEvent arg0) 
   {
            
      // IMP: Search Field & Button
      try
      {
         String sql = "SELECT * FROM admindatabase WHERE Username=? OR Password=? OR Level=? OR FirstName=? OR LastName=? OR Email=? OR Phone=?";
               
         ps = conn.prepareStatement(sql);
               
         ps.setString(1, txtSearch.getText());
         ps.setString(2, txtSearch.getText());
         ps.setString(3, txtSearch.getText());
         ps.setString(4, txtSearch.getText());
         ps.setString(5, txtSearch.getText());
         ps.setString(6, txtSearch.getText());
         ps.setString(7, txtSearch.getText());
         
         rs = ps.executeQuery();
                  
         try
         {
            ResultSetMetaData rsmetadata = rs.getMetaData();
                     
            int columns = rsmetadata.getColumnCount();
                     
            DefaultTableModel dtm = new DefaultTableModel();
            Vector columns_name = new Vector();
            Vector data_rows = new Vector();
                     
            for (int i=1; i<=columns; i++)
            {
               columns_name.addElement(rsmetadata.getColumnName(i));
            }
            dtm.setColumnIdentifiers(columns_name);
                  
            while (rs.next())
            {
               data_rows = new Vector();
               for (int j=1; j<=columns; j++)
               {
                  data_rows.addElement(rs.getString(j));
               }
               dtm.addRow(data_rows);
            }
            table.setModel(dtm);
         }
         catch (SQLException f)
         {
            f.printStackTrace();
         }
      }
      catch (Exception e)
      {
         JOptionPane.showMessageDialog(null, e);
      }   
   }
});
0

Na szybko widzę dwa rozwiązania.

  1. Tworzysz Statement, po którym możesz poruszać się w dwie strony (createStatement(ResultSet.TYPE_SCROLL_SENSITIVE...), w pierwszej pętli po ResultSet liczysz tylko wiersze, jeśli jest zero, to wyświetlasz komunikat, jeśli jest więcej niż 0 to wracasz na początek (rs.beforeFirst()).
  2. Zapamiętujesz wiersze do tymczasowej kolekcji.
1

Sprawdzac ile jest rekordow w DefaultTableModel.

Jesli model jest pusty to go po prostu nie ustawiać na tabeli i wyświetlać komunikat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1