[Java] Popolare jtable da db Mysql con DefaulTableModel

Discussione in 'Java' iniziata da Daniele Gessa, 15 Marzo 2015.

  1. Daniele Gessa

    Daniele Gessa Nuovo Utente

    Registrato:
    13 Marzo 2015
    Messaggi:
    3
    Mi Piace Ricevuti:
    2
    Punteggio:
    0
    Il problema come da titolo: ho stabilito correttamente la connessione al db e i vector vD e vP ricevono correttamente i dati, ma non riesco ad inserirli nella jtable: mi visualizza solamente i titoli di colonna ma nessuna riga. Cosa sbaglio? ecco il codice del table model:

    HTML:
    public class TabModCliPre extends DefaultTableModel {
            
        private int rowstot;
        private final String cli;
        private Object val;
        
        public TabModCliPre(String cli){
            this.cli = cli;
        }
        
        @Override
        public int getRowCount() {
            try {
                Connection connection;
                Class.forName ("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection("jdbc:mysql://dang83-notebook:3306/Gestipan", "dang83", "08081983");
                String sql = "Select DescProd from TPrezzi where RagSoc=?";
                PreparedStatement stm = connection.prepareStatement(sql);
                stm.setString(1, cli);
                ResultSet id = stm.executeQuery();
                id.isFirst();
                rowstot=0;
                while (id.next()){
                    rowstot++;
                }
                stm.close();
                id.close();
                connection.close();
            } 
            catch (ClassNotFoundException | SQLException ex) {
                Logger.getLogger(TabModCliPre.class.getName()).log(Level.SEVERE, null, ex);
            }
            return rowstot;
        }
    
        @Override
        public int getColumnCount() {
            return 2;
        }
        
        @Override
        public String getColumnName(int col){
            String name = null;
            switch (col){
                case 0:
                    name = "Descrizione Prodotto";
                    break;
                case 1:
                    name = "Prezzo in € esclusa IVA";
                    break;
            }
            return name;
        }
        
        @Override
        public Class getColumnClass(int columnIndex){
            switch (columnIndex){
                case 0:
                    return String.class;
                case 1:
                    return Float.class;
            }
            return Object.class;
        }
        
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex){
            return columnIndex==1;
        }
        
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            try {
            Connection connection;
            Class.forName ("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://dang83-notebook:3306/Gestipan", "dang83", "08081983");
            String sql = "Select DescProd, Prezzo from TPrezzi where RagSoc=?";
            ResultSet id;
            PreparedStatement stm = connection.prepareStatement(sql);
            stm.setString(1, cli);
            id = stm.executeQuery();
            Vector vD = new Vector();
            Vector vP = new Vector();
            id.first();
            while (id.next()){
                vD.add(id.getString(1));
                vP.add(id.getFloat(2));
            }
            switch (columnIndex){
                
                case 0:
                    for (rowIndex=0; rowIndex<rowstot; rowIndex++) {
                        val = vD.get(rowIndex);
                        System.out.println(val);
                    }
                case 1:
                    for (rowIndex=0; rowIndex<rowstot; rowIndex++) {
                        val = vP.get(rowIndex);
                        System.out.println(val);
                    }    
            }
            id.close();
            stm.close();
            connection.close();
            }
            catch (ClassNotFoundException | SQLException ex) {
                Logger.getLogger(ModP.class.getName()).log(Level.SEVERE, null, ex);
            }
            return val;
        }
        
        
        @Override
        public void setValueAt(Object val, int rowIndex, int columnIndex) {
                   
        }
    }
    
    
    
    e del frame che lo richiama:

    HTML:
    public class ModP extends JFrame {
        
        private JComboBox jccliente;
        private JTable jtpp;
        private JPanel north;
        private JPanel center;
        private JPanel south;
        private JButton jbagg;
        private JLabel jlint;
        private String cli;
        private JFrame modp;
        private Connection connection;
        private Vector load;
        private Statement stmt;
        private ResultSet rs;
        private TableModel pctm;
        private JButton jbvis;
    
    
        public ModP() throws SQLException, ClassNotFoundException {
            super ("Modifica Prezzi Clienti");
            setBounds(10,35,150,150);
            getContentPane().setLayout(new BorderLayout());
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            jccliente = new JComboBox();
            jccliente.setModel(CliModel.model());
            jbvis = new JButton ("Visualizza");
            jbvis.addActionListener(new jcclistener());
            north = new JPanel();
            north.add(jccliente);
            north.add(jbvis);
            jtpp = new JTable();
            DefaultTableModel tabmod = new TabModCliPre(cli);
            jtpp.setModel(tabmod);
            center = new JPanel();
            JScrollPane jsp = new JScrollPane(jtpp);
            center.add(jsp);
           
        //Costruzione pannello principale    
            modp = new JFrame();
            getContentPane().add(north, BorderLayout.NORTH);
            getContentPane().add(center, BorderLayout.CENTER);
            pack();
        }
        
        class jcclistener implements ActionListener {
            @Override
            public void actionPerformed (ActionEvent e) {
                cli = (String) jccliente.getSelectedItem();
                System.out.println(cli);
                
            }
        }
    }
    Nel frame il listener jcclistener serve teoricamente ad aggiornare la tabella al cambio dei clienti nel jbutton. Insomma voglio che selezionando un cliente mi visualizzi in tabella i prezzi dei prodotti che richiede quel cliente. Poi da questo punto dovrei implementare ulteriormente ma per ora la visualizzazione della tabella è l'obiettivo principale. Grazie per qualsiasi consiglio... Nel frattempo :book::book::book:
     
    A ottofonsuppost piace questo elemento.
  2. Daniele Gessa

    Daniele Gessa Nuovo Utente

    Registrato:
    13 Marzo 2015
    Messaggi:
    3
    Mi Piace Ricevuti:
    2
    Punteggio:
    0
    Nessuno???:crying::crying::crying:
     
    A ottofonsuppost piace questo elemento.
Sto caricando...

Condividi questa Pagina