[Java] Popolare jtable da db Mysql con DefaulTableModel

Daniele Gessa

Nuovo Utente
13 Mar 2015
3
2
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:
 
  • Like
Reactions: ottofonsuppost