Leggere db mysql in un componente

di il
10 risposte

Leggere db mysql in un componente

Buongiorno a tutti,
sono nuovissimo del forum e ringrazio anticipatamente per il supporto.

Sto studiando da un mese l'interessantissimo linguaggio Java e per esercitarmi ho creato un interfaccia grafica stand alone con una jtext area nella quale vorrei inserire i dati letti da un db in mysql.

La connessione è ok.

Ho letto che avrei dovuto creare un vettore per leggere i record e l' ho fatto. funziona.

Quindi:

nella classe del "main" faccio aprire l'interfaccia,
in una classe chiamata "grafica" ho un metodo per la connessione che legge anche i record tramite un vettore e un altro metodo che crea l'interfaccia grafica.

come posso leggere la Jtext area il risultato del ciclo che legge i record?

Spero di essere stato chiaro, riporto il codice della classe "Grafica" dove per comodità per ora ho inserito anche il metodo per la connessione.


package mycontacts;

/**
 *
 * @author Andrea
 */
import java.sql.*;
import java.awt.Color;
//import javax.swing.JButton
import java.util.Vector;
import javax.swing.JFrame;
//import javax.swing.JLabel;
import javax.swing.JPanel;
//import javax.swing.JToolTip;

import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;

/**
 *
 * @author Andrea
 */
public class Grafica extends JFrame {
    
    Vector v = new Vector();
    
    private void connessione() throws SQLException {

    try
    {
    Class.forName("com.mysql.jdbc.Driver");
    }
    catch (Exception exc)
    {
    System.out.println("Errore - Driver jdbc non presente: "+ exc.getMessage());
    }
    
    boolean isconn = true;
    
    

    try
    {
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jtest", "root", "root" );
    if (isconn){
        
    Statement stmt = conn.createStatement();
    ResultSet rset = stmt.executeQuery("SELECT * FROM dati");
    while(rset.next()) {
    int mycampi = rset.getRow();
    String mystring = rset.getString("Nome");
    v.add(mycampi);
    v.add(mystring);
    }
        
    String connesso = "Connessione al Database effettuata con successo";
    System.out.println(connesso);
    }
    else { 
    String nonconnesso = "Connessione al Database non riuscita";
    System.out.println(nonconnesso);
    }
    }
    catch (Exception exc)
    {
    System.out.println("Errore: "+ exc.getMessage());
    }
    
    boolean isConnessione = false;
    
}

    JFrame f;
    JPanel p, p1;
    JTextArea t;

    Grafica(){  
    
    f = new JFrame("My Contacts");
    f.setVisible(true);
    f.setLayout(null);
    f.setSize(800, 600);
    f.setLocationRelativeTo(null);
    f.setResizable(false);
    f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    
    p = new JPanel();
    p.setBounds(5, 20, 780, 60);
    TitledBorder Bordi = new TitledBorder("Entra nell'Area Riservata per visualizzare i dati sensibili");
    Bordi.setTitleJustification(TitledBorder.LEFT);
    p.setBorder(Bordi);
    p.setVisible(true);
    
    p1 = new JPanel();
    p1.setBounds(5, 110, 780, 60);
    TitledBorder Bordi1 = new TitledBorder("I tuoi contatti");
    Bordi1.setTitleJustification(TitledBorder.LEFT);
    p1.setBorder(Bordi1);
    p1.setVisible(true);
        
    t = new JTextArea();
    t.setBackground(Color.white);
    t.setBounds(15, 130, 760, 30);
    t.setVisible(true);

    f.add(t);
    f.add(p);
    f.add(p1);
    
    }
    
}


Chiedo inoltre se è giusta l'idea di leggere il db in una jtextarea o sarebbe meglio qualcosaltro.

Grazie per chi sarà interessato ad illuminarmi.

10 Risposte

  • Re: Leggere db mysql in un componente


    Ciao,
    ho letto il post e volevo chiederti una cosa.
    Il tuo problema è leggere il DB e scrivere il risultato della query in una JTextArea?
    Se è così perchè proprio una JTextArea e non un ScrollPane?
  • Re: Leggere db mysql in un componente

    Accetto ogni proposta, se pensi che sia meglio provo a fare come dici ma... il problema è come passare i dati
  • Re: Leggere db mysql in un componente

    E poi... scusa ma se uso un JSclollPane non devo sempre inserire al suo interno un componente? e poi a questo componente come gli passo i dati del mio vettore?
  • Re: Leggere db mysql in un componente


    Ciao,
    io invece di Vector uso List e poi..
    
    List lstdata;
    lstdata= new List();
    ...
    rs= st.executeQuery(sql);
    lstdata.removeAll();
    lstdata.removeAll();
    while (rs.next())
    {
       String strRiga= rs.getString("Codice") + " " + rs.getString("Cognome") + " " + rs.getString("Nome");
    lstdata.add(strRiga);
    }
    
    [/color]
  • Re: Leggere db mysql in un componente

    Ok e quindi dopo come lo passi allo JScrollPane ?
  • Re: Leggere db mysql in un componente

    Hai ragione, avevo dimenticato:
    
    ScrollPane scroll;
    scroll.add(lstdata);
    
  • Re: Leggere db mysql in un componente


    Ciao,
    allora mi sono industriato per creare un pò di codice che spero ti sia utile.
    
    // -----------------------------------------------------------------------------
    //Import.
    import java.awt.Button;
    import java.awt.Frame;
    import java.awt.Color;
    import java.awt.BorderLayout;
    import java.awt.ScrollPane;
    import java.awt.List;
    import java.awt.Panel;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class QueryParam extends Frame
    {
    	ScrollPane scroll;
    	List lstAnagrafica;
    	Panel pnl2;
    	Button btnCerca;
    	Connection conn;
    	
    	// -------------------------------------------------------------------------
    	// Costruttore.
    	public QueryParam()
    	{
    		super("Ricerca Articoli.");
    		
    		// ---------------------------------------------------------------------
    		// Prepara form.
    		setSize(350,300);                 //Specifica le dimensioni della form.
    		setBackground(Color.lightGray);   //Setta il colore di fondo della form.
    		setLayout(new BorderLayout());    //Setta i bordi della form.
    		
    		scroll= new ScrollPane();
    		lstAnagrafica= new List();
    		scroll.add(lstAnagrafica);
    		add(scroll,BorderLayout.CENTER);
    		
    		pnl2= new Panel(new BorderLayout());
    		btnCerca= new Button();
    		btnCerca.setLabel("Cerca");
    		pnl2.add(btnCerca,BorderLayout.EAST);
    		add(pnl2,BorderLayout.SOUTH);
    		
    		addWindowListener(new WindowAdapter()
    		{
    			public void windowClosing(WindowEvent e)
    			{
    				try
    				{
    					conn.close();
    					System.out.println("Connessione chiusa.");
    				}
    				catch (Exception ex)
    				{
    					ex.printStackTrace();
    					System.exit(2);
    				}
    				System.exit(0);
    			}
    		});
    		
    		try
    		{
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			conn= DriverManager.getConnection("jdbc:odbc:DBTest");
    			System.out.println("Connessione aperta.");
    		}
    		catch (Exception ex)
    		{
    			ex.printStackTrace();
    			System.exit(1);
    		}
    		
    		btnCerca.addActionListener(new ActionListener()
    		{
    			public void actionPerformed(ActionEvent e)
    			{
    				inviaQuery();
    			}
    		});
    	}
    	
    	private void inviaQuery()
    	{
    		String sql;
    		Statement st;
    		ResultSet rs;
    		
    		sql=  new String();
    		sql= "SELECT * FROM Anagrafica;";
    		try
    		{
    			st = conn.createStatement();
    			rs= st.executeQuery(sql);
    			lstAnagrafica.removeAll();
    			while (rs.next())
    			{
    				String strRiga=
    						rs.getString("Codice") + " " +
    						rs.getString("Cognome") + " " +
    						rs.getString("Nome");
    					lstAnagrafica.add(strRiga);
    			}
    		}
    		catch (SQLException e)
    		{
    			e.printStackTrace();
    			return;
    		}
    	}
    	
    	// -------------------------------------------------------------------------
    	// Main.
    	public static void main(String[] args)
    	{
    		QueryParam qp;
    		
    		qp= new QueryParam();
    		qp.setVisible(true);
    	}
    }
    
    Come avrai capito questo piccolo applicativo crea una form nella quale a seguito della pressione del pulsate "Cerca" verrà visualizzato il contenuto della tabella: Anagrafica, presente nel DB: DBTest, creato e gestito con MS Access 2007.
    Il DB registrato su ODBC ha come alias: DBTest ed il suo schema è:
    Anagrafica(Codice,Cognome,Nome).
    Niente di più semplice. Ovviamente il DB lo puoi creare col DBMS a te più congeniale ricordandoti di modificare la stringa url di connessione.
    Ci ho messo un pò, ed anche se un pò spartano funziona. Dimmi che ne pensi.
    [/color]
  • Re: Leggere db mysql in un componente

    Ciao Jolly,
    oggi ho un po di tempo per studiare quello che mi hai scritto, per questo ancor prima di provare il tutto volevo ringraziarti.
  • Re: Leggere db mysql in un componente

    Ciao Jolly ho provato il tuo codice e funziona, per questo sono qui per ringraziarti infinitamente per l'opportunità di studiare il tuo codice.

    Netbeans mi ha fatto modificare qualcosa, ad esempio ha inserito degli @Override ai metodi ed ha eliminato le ex.printStackTrace(); , per questo ti riporto il codice così com'è adesso se ti interessa.

    Prima di questo però avrei una curiosità che non richiede codice non ti stresso più!

    Io ho iniziato da un mesetto e poco più a studiare Java, ho letto una giuda OOP, una guida JAVA, esercizi di base trovati on line ecc ecc, ogni tanto giro un po per la libreria on line ma non capisco se questo è il metodo giusto.

    Certo studiare da soli senza un tutor magari non è semplice, per me che sono un webdesign poi...

    Ho anche difficoltà ad interpretare quello che potrei fare con le varie classi ed i metodi della libreria...

    Hai dei consigli?

    Ancora grazie per il tuo MEGA UTILE aiuto.

    Buona giornata,

    Andrea
  • Re: Leggere db mysql in un componente

    
    package queryparam;
    
    // -----------------------------------------------------------------------------
    //Import.
    import java.awt.Button;
    import java.awt.Frame;
    import java.awt.Color;
    import java.awt.BorderLayout;
    import java.awt.ScrollPane;
    import java.awt.List;
    import java.awt.Panel;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class QueryParam extends Frame
    {
       ScrollPane scroll;
       List lstAnagrafica;
       Panel pnl2;
       Button btnCerca;
       Connection conn;
       
       // -------------------------------------------------------------------------
       // Costruttore.
       public QueryParam()
       {
          super("Ricerca Articoli.");
          
          // ---------------------------------------------------------------------
          // Prepara form.
          setSize(350,300);                 //Specifica le dimensioni della form.
          setBackground(Color.lightGray);   //Setta il colore di fondo della form.
          setLayout(new BorderLayout());    //Setta i bordi della form.
          
          scroll= new ScrollPane();
          lstAnagrafica= new List();
          scroll.add(lstAnagrafica);
          add(scroll,BorderLayout.CENTER);
          
          pnl2= new Panel(new BorderLayout());
          btnCerca= new Button();
          btnCerca.setLabel("Cerca");
          pnl2.add(btnCerca,BorderLayout.EAST);
          add(pnl2,BorderLayout.SOUTH);
          
          addWindowListener(new WindowAdapter()
          {
                @Override
             public void windowClosing(WindowEvent e)
             {
                try
                {
                   conn.close();
                   System.out.println("Connessione chiusa.");
                }
                catch (Exception ex)
                {
                   System.exit(2);
                }
                System.exit(0);
             }
          });
          
          try
          {
             Class.forName("com.mysql.jdbc.Driver");
             conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jtest", "root", "root");
             System.out.println("Connessione aperta.");
          }
          catch (Exception ex)
          {
             System.exit(1);
          }
          
          btnCerca.addActionListener(new ActionListener()
          {
                @Override
             public void actionPerformed(ActionEvent e)
             {
                inviaQuery();
             }
          });
       }
       
       private void inviaQuery()
       {
          String sql;
          Statement st;
          ResultSet rs;
          
          sql=  new String();
          sql= "SELECT * FROM dati;";
          try
          {
             st = conn.createStatement();
             rs= st.executeQuery(sql);
             lstAnagrafica.removeAll();
             while (rs.next())
             {
                String strRiga=
                      rs.getString("id") + " " +
                      rs.getString("Nome") + " " +
                      rs.getString("Cognome");
                   lstAnagrafica.add(strRiga);
             }
          }
          catch (SQLException e)
          {
             return;
          }
       }
       
       // -------------------------------------------------------------------------
       // Main.
       public static void main(String[] args)
       {
          QueryParam qp;
          
          qp= new QueryParam();
          qp.setVisible(true);
       }
    }
    
    
Devi accedere o registrarti per scrivere nel forum
10 risposte