JTable aggiornamento database MySql

di il
4 risposte

JTable aggiornamento database MySql

Ciao Raga ho urgente bisogno di aiuto devo tramite un pulsante di ricerca far visualizzare una tabella con i dati prelevati dal database tutto in java come devo fare?

4 Risposte

  • Re: JTable aggiornamento database MySql

    Bri ha scritto:


    devo tramite un pulsante di ricerca far visualizzare una tabella con i dati prelevati dal database tutto in java come devo fare?
    Sicuramente serve come minimo JDBC (con il driver JDBC apposito per MySQL) per poter accedere al database. Poi potrebbe anche essere utile implementare un apposito table model per contenere i dati in una struttura specifica e inoltre valutare se far fare le query al table model oppure no (e su questo aspetto ci sono cose da valutare).
    Non è un argomento "banale". Quindi la questione è anche: cosa conosci di JDBC, JTable, table model? Hai già provato a scrivere qualcosa oppure proprio nulla?
  • Re: JTable aggiornamento database MySql

    Ho scritto questo fa la connessione al db e preleva i dati con le query solo che sto provando ad inserire la jtable di prova e non riesco a renderla dinamica con le query:

    package it.view;
    import it.DBConnection.DbConnection;
    import it.view.logIn;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Iterator;
    import java.util.Vector;

    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumnModel;
    import javax.swing.table.TableModel;

    public class dipendente extends JFrame{



    public dipendente(){

    super("Dipendente"); //titolo pagina




    setSize(1800,1000); //grandezza pagina
    setLocation(50,15);
    setLayout(null);
    //immagini bottoni
    ImageIcon imgc=new ImageIcon("car.gif");
    ImageIcon logO=new ImageIcon("logout.gif");
    ImageIcon cerc=new ImageIcon("cerca.gif");

    //creo tipo di font
    Font f=new Font("times new roman",Font.PLAIN,25);

    //creo contenitore
    Container c =getContentPane();


    //creo i label
    JLabel Ben=new JLabel("Benvenuto "+logIn.U.getText()+" !");
    JLabel Cat=new JLabel("Categoria");
    //creo i button
    JButton Esci=new JButton(logO);
    JButton car=new JButton(imgc);
    JButton cerca=new JButton(cerc);

    //creo menu tendina

    final JComboBox Cate = new JComboBox();

    //query al dataBase per le categorie
    String sql="Select DISTINCT Nome from Categoria;";
    Vector<String[]>result=DbConnection.getInstance().eseguiQuery(sql);
    Iterator<String[]>i=result.iterator();



    final JLabel ABC=new JLabel("la selezione e':");
    final JLabel EFG=new JLabel("i risultati sono: ");
    //scorre nell'array
    while(i.hasNext()){
    String[] riga = i.next();

    Cate.addItem(riga[0]);

    }
    cerca.addActionListener(new ActionListener(){


    public void actionPerformed(ActionEvent e){
    String s=Cate.getSelectedItem().toString();
    ABC.setText(s);

    String sql="Select IdCategoria from Categoria where Nome='"+s+"';";
    Vector<String[]>result=DbConnection.getInstance().eseguiQuery(sql);
    Iterator<String[]>i=result.iterator();


    while(i.hasNext()){
    String[]riga=i.next();
    EFG.setText(riga[0]);
    }

    }//chiude l'action performed

    }); //chiude actionlistener

    String[] columNames={"aaa","bbb"};
    Object[][] Data={{"banana","caffe"},{"cocco","arance"}};

    JTable table=new JTable(Data,columNames);
    table.setFillsViewportHeight(true);
    JScrollPane pane=new JScrollPane(table);



    //imposto font
    Ben.setFont(f);

    Cat.setFont(f);
    Esci.setFont(f);
    car.setFont(f);
    Cate.setFont(f);

    Ben.setBounds(1350,10,200,50);
    Esci.setBounds(1575,10,50,50);
    car.setBounds(1650,10,50,50);
    Cate.setBounds(800,100,Cate.getPreferredSize().width,50);
    cerca.setBounds(1000, 100, 100, 50);
    ABC.setBounds(1200, 100, 100, 50);
    EFG.setBounds(500,300,1000,50);
    pane.setBounds(700,500,150,113);

    c.add(Ben);
    c.add(EFG);
    c.add(Esci);
    c.add(car);
    c.add(Cate);
    c.add(cerca);
    c.add(ABC);
    c.add(pane);

    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);




    }
    }
  • Re: JTable aggiornamento database MySql

    Bri ha scritto:


    ho scritto questo fa la connessione al db e preleva i dati con le query solo che sto provando ad inserire la jtable di prova e non riesco a renderla dinamica con le query
    Il JTable lo istanzi nel costruttore, quindi in quel momento ovviamente non hai ancora dati da DB, visto che li otterrai solo a seguito della azione sul pulsante cerca. Quindi devi cambiare un pochino.
    Fai così, come prima soluzione veloce (poi vedi se ti va bene ).

    1) Nel costruttore istanzia un DefaultTableModel ed assegnalo ad una variabile di istanza. Lo (ri)userai ad ogni click del cerca. Assegnalo subito anche al JTable.
    2) Nel actionPerformed sfrutta uno dei due setDataVector di DefaultTableModel. Puoi usare

    setDataVector(Vector dataVector, Vector columnIdentifiers)
    oppure
    setDataVector(Object[][] dataVector, Object[] columnIdentifiers)

    Partendo dal Vector<String[]> che ottieni dalla query, è molto facile ottenere un Object[][] oppure un Vector di Vector di Object. Visto che gli elementi nel Vector sono già degli array, arrivare ad un Object[][] è più facile perché basta fare:

    Object[][] data = result.toArray(new Object[0][]);

    a quel punto: defTableModel.setDataVector(data, new Object[] { "header", ..... });

    Uno dei difetti di tutto questo è che devi sapere in anticipo quante colonne otterrai, per poter creare l'array dei nomi di colonne.

    P.S. Tutto questo comunque è molto buttato lì, ci sono soluzioni ampiamente migliori ma richiedono più "design".
  • Re: JTable aggiornamento database MySql

    Per ora se funziona è sufficente anche questa grazie
Devi accedere o registrarti per scrivere nel forum
4 risposte