Print selected rows from JTable (java + sql)

0

Hej,

Piszę sobie kod dla JButtona, który będzie miał akcję drukowania tylko wybranych wierszy na JTable, która ma połączenie z bazą danych SQL. Do chwili obecnej wszystko szło spoko i samo drukowanie ogarniam, ale pojawił się mały problem z przygotowaniem zaznaczonych wierszy do drukowania.

Problem wygląda tak, że zaznaczam wybrane wiersze -> klikam "print" -> i po repaincie tablicy (która ma wyświetlić tylko te wiersze, które zaznaczyłem, a które w dalszej akcji JButtona zostaną wydrukowane) fakt faktem wyświetla mi np. 4 wiersze jeśli zaznaczyłem taką ich liczbę, ale wszystkie wyświetlone wiersze są klonem "ostatniego" wiersza, na którym skończyłem zaznaczanie. Wychodzi na to, że robię gdzieś błąd "merytoryczny" w drugiej pętli "for". Będę ogromnie wdzięczny za pomoc!

Wizualizacja problemu:

Bez tytułu.jpg

I kod:

JButton btnPrintDatabase = new JButton("Print database");
btnPrintDatabase.addActionListener(new ActionListener() 
{
   public void actionPerformed(ActionEvent arg0) 
   {
      //IMP: PrintDatabaseButton
      MessageFormat header = new MessageFormat("Informations about users from 'admindatabase'");
      MessageFormat footer = new MessageFormat("Page{0, number, integer}");
            
      try
      {
         String sql = "SELECT * FROM admindatabase";
               
         ps = conn.prepareStatement(sql);
         rs = ps.executeQuery();
         ResultSetMetaData rsmetadata = rs.getMetaData();
               
         int columns = rsmetadata.getColumnCount();
               
         DefaultTableModel dtm = new DefaultTableModel();

         Vector data_rows = new Vector();
         Vector columns_name = new Vector();
               
         for (int i = 1; i <= columns; i++)
         {
            columns_name.addElement(rsmetadata.getColumnName(i));
         }
         dtm.setColumnIdentifiers(columns_name);
                  
         int selectedRows[] = table.getSelectedRows();
               
         for (int i = 0; i < selectedRows.length; i++)
         {
            String tableSelectedRow = (table.getModel().getValueAt(selectedRows[i], 0).toString());
            String sqlRows = "SELECT * FROM admindatabase WHERE UserID='"+tableSelectedRow+"'";
                  
            ps = conn.prepareStatement(sqlRows);
            rs = ps.executeQuery();
                  
            if (rs.next())
            {
               for (int j = 1; j <= columns; j++)
               {
                  data_rows.addElement(rs.getString(j));
               }
               dtm.addRow(data_rows);
            }      
         }      
         table.setModel(dtm);   
      }
      catch (Exception e)
      {
         JOptionPane.showMessageDialog(null, e);
      }
               
      //Dalsza część akcji odpowiedzialna za drukowanie.
   }
});

Pozdrawiam!

1

data_rows nie jest czysty przy kolejnych interacjach, wyczyść go albo przenieś deklarację do pętli

0

Przeniosłem "Vector data_rows = new Vector();" pod drugą pętlę "for" i już wszystko działa :D Dziękuję i pozdrawiam!

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