Editando dados do MySQL

Olá, estou desenvolvendo um programa que possui as seguintes finalidades:

  • Criar
  • Editar
  • Excluir

Estou utilizando o MySQL como meu bd, e preciso criar uma opçao de editar os dados após realizar um busca.
MAS gostaria de editar esses dados a partir da mesma interface de cadastro.
Simplificando quero editar e cadastrar utilizando um unica “janela”. :wink:

Segue o codigo desta classe.


import java.sql.Date.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import javax.swing.text.MaskFormatter;

public class Cadastro extends JFrame {

    //criaçao dos campos nome, datavenda, telefone, celular, end./cidade e obs
    private JTextField nome = new JTextField();
    private JTextField codOsv = new JTextField();
    private javax.swing.JFormattedTextField dataVenda = new JFormattedTextField();
    String status[] = {"FECHADO", "ATIVO", "CANCELADO"};
    private JComboBox sts = new JComboBox(status);
    String fpag[] = {"CHEQUE", "À VISTA", "CARTEIRA", "DIFERENCIADO"};
    private JComboBox pag = new JComboBox(fpag);

    private JTextField xpag = new JTextField();

    String x[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
    private JComboBox xpgm = new JComboBox(x);
    
    private JTextField prazoE = new JTextField();

    String v[] = {"FUNCIONARIO", "FUNCIONARIO","FUNCIONARIO", "FUNCIONARIO","FUNCIONARIO"};
    private JComboBox vend = new JComboBox(v);

    private JTextField tipo_p = new JTextField();


    private javax.swing.JFormattedTextField telefone = new JFormattedTextField();
    private JFormattedTextField celular = new JFormattedTextField();
    JComboBox cdd = new JComboBox();
    private JTextField endereco = new JTextField();
    private JTextField cidade = new JTextField();
    String est[] = {"RS","RJ","SP","MG"};
    private JComboBox estd = new JComboBox(est);

    private JTextField obs = new JTextField();
    
    private JLabel labelNome = new JLabel("NOME");
    private JLabel labelCodOsv = new JLabel("COD-OSV");
    private JLabel labelDataVenda = new JLabel("DATA VENDA");
    private JLabel labelStatus = new JLabel("STATUS");
    private JLabel labelFormPag = new JLabel("PAGAMENTO");
    private JLabel labelXPag = new JLabel("x");
    private JLabel labelprazoE = new JLabel("PRAZO");
    private JLabel labeldias = new JLabel("dias");
    private JLabel labelvendedor = new JLabel("VENDEDOR");
    private JLabel labelProduto = new JLabel("PRODUTO");
    private JLabel labelTelefone = new JLabel("TELEFONE");
    private JLabel labelCelular = new JLabel("CELULAR");
    private JLabel labelEndereco = new JLabel("ENDEREÇO");
    private JLabel labelCidade = new JLabel("CIDADE");
    private JLabel labelEstado = new JLabel("ESTADO");
    private JLabel labelObs = new JLabel("OBS");
    
    //private JComboBox status = new JComboBox();
    private JButton btnSalvar = new JButton("SALVAR");
    private JButton btnCancelar = new JButton("CANCELAR");

    public Cadastro() {
        iniciaComponentes();
    }

    public void iniciaComponentes() {

        this.getContentPane().setLayout(null);
        this.setSize(800, 400);
        this.setLocation(280, 200);
        this.setTitle("REDE VITORIA - GERENCIAMENTO DE DADOS");
        this.setResizable(false);


        nome.setBounds(new Rectangle(150, 37, 300, 21));
        this.getContentPane().add(nome, null);
        codOsv.setBounds(new Rectangle(580, 37, 110, 21));
        this.getContentPane().add(codOsv, null);
        dataVenda.setBounds(new Rectangle(150, 65, 110, 21));
        this.getContentPane().add(dataVenda, null);
        sts.setBounds(new Rectangle(340, 65, 110, 21));
        this.getContentPane().add(sts, null);
        pag.setBounds(new Rectangle(580, 65, 110, 21));
        this.getContentPane().add(pag, null);
        xpgm.setBounds(new Rectangle(710, 65, 40, 21));
        this.getContentPane().add(xpgm, null);
        telefone.setBounds(new Rectangle(150, 121, 110, 21));
        this.getContentPane().add(telefone, null);
        celular.setBounds(new Rectangle(340, 121, 110, 21));
        this.getContentPane().add(celular, null);

        prazoE.setBounds(new Rectangle(150, 93, 40, 21));
        this.getContentPane().add(prazoE, null);
        vend.setBounds(new Rectangle(340, 93, 110, 21));
        this.getContentPane().add(vend, null);

        tipo_p.setBounds(new Rectangle(580, 93, 110, 21));
        this.getContentPane().add(tipo_p, null);
        
        endereco.setBounds(new Rectangle(150, 149, 300, 21));
        this.getContentPane().add(endereco, null);
        cidade.setBounds(new Rectangle(150, 177, 140, 21));
        this.getContentPane().add(cidade, null);
        estd.setBounds(new Rectangle(370, 177, 75, 21));
        this.getContentPane().add(estd, null);
        obs.setBounds(new Rectangle(150, 233, 300, 21));
        this.getContentPane().add(obs, null);

        labelNome.setBounds(new Rectangle(40, 42, 150, 13));
        this.getContentPane().add(labelNome, null);
        labelCodOsv.setBounds(new Rectangle(480, 42, 150, 13));
        this.getContentPane().add(labelCodOsv, null);
        labelDataVenda.setBounds(new Rectangle(40, 70, 150, 13));
        this.getContentPane().add(labelDataVenda, null);

        labelprazoE.setBounds(new Rectangle(40, 95, 150, 13));
        this.getContentPane().add(labelprazoE, null);
        labeldias.setBounds(new Rectangle(200, 93, 40, 21));
        this.getContentPane().add(labeldias, null);
        labelvendedor.setBounds(new Rectangle(260, 95, 150, 13));
        this.getContentPane().add(labelvendedor, null);


        labelTelefone.setBounds(new Rectangle(40, 121, 150, 13));
        this.getContentPane().add(labelTelefone, null);
        labelCelular.setBounds(new Rectangle(263, 121, 150, 13));
        this.getContentPane().add(labelCelular, null);
        labelStatus.setBounds(new Rectangle(263, 70, 150, 13));
        this.getContentPane().add(labelStatus, null);
        labelFormPag.setBounds(new Rectangle(480, 70, 150, 13));
        this.getContentPane().add(labelFormPag, null);
        labelXPag.setBounds(new Rectangle(760, 67, 40, 21));
        this.getContentPane().add(labelXPag, null);

        labelProduto.setBounds(new Rectangle(480, 93, 150, 13));
        this.getContentPane().add(labelProduto, null);

        labelEndereco.setBounds(new Rectangle(40, 152, 150, 13));
        this.getContentPane().add(labelEndereco, null);
        labelCidade.setBounds(new Rectangle(40, 182, 150, 13));
        this.getContentPane().add(labelCidade, null);
        labelEstado.setBounds(new Rectangle(298, 182, 150, 13));
        this.getContentPane().add(labelEstado, null);
        labelObs.setBounds(new Rectangle(40, 233, 150, 13));
        this.getContentPane().add(labelObs, null);

        //metodo ira criar uma conexao com o bd
        btnSalvar.setBounds(new Rectangle(235, 300, 110, 30));
        this.getContentPane().add(btnSalvar, null);
        btnSalvar.addActionListener (new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // Chamada ao Procedimento
                //JOptionPane.showMessageDialog(null,"VOCE NAO PODE FAZER ISSO !");
             salvar();
            }
        });

        btnCancelar.setBounds(new Rectangle(390, 300, 110, 30));
        this.getContentPane().add(btnCancelar, null);
        btnCancelar.addActionListener (new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sair();

            }
        });


        dataVenda.setText("DATA VENDA");

        try {
             dataVenda.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory
             (new javax.swing.text.MaskFormatter("##/##/####")));

        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
            System.out.println("NAO PODE PROSSEGUIR \n\n"+ ex.getMessage());
        }





telefone.setText("TELEFONE");

        try {
            telefone.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory
                    (new javax.swing.text.MaskFormatter("(##) ####-####"))
                    );

        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
            System.out.println("NAO PODE PROSSEGUIR \n\n"+ ex.getMessage());
        }

      

     celular.setText("Celular");

        try {
            celular.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("(##) ####-####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
            System.out.println("NAO PODE PROSSEGUIR \n\n"+ ex.getMessage());
        }



        

        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                aoFechar();
            }
        });
    }

    private MaskFormatter setMascara(String mascara){
       MaskFormatter mask = null;
       try{
          mask = new MaskFormatter(mascara);
          }catch(java.text.ParseException ex){}
       return mask;
    }

    private void aoFechar() {
        dispose();
    }

    private void sair() {
        this.setVisible(false); //tela atual fecha
        Menu run = new Menu();
        run.setVisible(true);
    }



    private void salvar() {

    JOptionPane.showMessageDialog(null,"SALVANDO ARQUIVOS ...");

    Connection con = null;
    String url = "jdbc:mysql://localhost:3306/";
    String db = "Gestao";
    String driver = "com.mysql.jdbc.Driver";
    try{
      Class.forName(driver);
      con = DriverManager.getConnection(url+db,"root","SENHA");
      Statement stm = con.createStatement();

      try{

         //int dv = Integer.parseInt( dataVenda.getText() );
         String nm = nome.getText();
         String cdosv = codOsv.getText();
         String dv = dataVenda.getText();
         String st = (String) sts.getSelectedItem();
         String pgmnt = (String) pag.getSelectedItem();
         String xpg = (String) xpgm.getSelectedItem();
         String prz = prazoE.getText();
         String vendd = (String) vend.getSelectedItem();
         String prdt = tipo_p.getText();
         String tel = telefone.getText();
         String cel = celular.getText();
         String end = endereco.getText();
         String cd = cidade.getText();
         String std = (String) estd.getSelectedItem();


       stm.executeUpdate("INSERT INTO cliente (nome,cod_osv,datavenda,status,pagamento_f,pagamento_x,"
               + "prazo,vendedor,prod_t,telefone,celular,endereco,cidade,estado)"
               + " values ('" + nm + "','" + cdosv +  "','" + dv +  "','" + st +  "','" + pgmnt +  "'"
               + ",'" + xpg +  "','" + prz +  "','" + vendd +  "','" + prdt +  "','" + tel +  "'"
               + ",'" + cel +  "','" + end +  "','" + cd +  "','" + std +  "')" );
       
         con.close();

      }
      catch (SQLException s){
        System.out.println("NAO PODE PROSSEGUIR \n\n"+ s.getMessage());
      }
    }
    catch (Exception e){
      e.printStackTrace();
      System.out.println("NAO PODE PROSSEGUIR \n\n"+ e.getMessage());
    }

        //termina de executar a gravaçao do arquivo e volta ao menu
        this.setVisible(false); //tela atual fecha
        Menu run = new Menu();
        run.setVisible(true);
    }


    
}//finaliza classe Cadastro

Obs:. O codigo por si só esta uma bagunça devido à algumas circunstancias, esta rodando perfeitamente… :smiley:

Não é por nada … mas o que você acha de separar um pouco as coisas ?
Olha só, eu tiraria estas ações que você está realizando no BD e colocaria em uma classe separada.
Faria a tela chamar uma classe controladora e esta chamaria a classe que realiza as ações no BD.
Porque ?
Porque tua tela ficaria só com a responsabilidade dela (mostrar os dados para o usuario). Alem disso acrescentar funcionalidades tambem ficaria mais facil. Salvar por exemplo, será o mesmo da edição, quanto da inserção, certo ?
Outra coisa, e se outra “tela” tambem for salvar um cadastro destes ? Após refatorar, seria só chamar a classe controladora.

Boa sorte.

É, realmente tenho que confessar que essa classe esta uma bagunça :?
Mas a ideia era dar uma ajeitada nela apos a conclusão do mesmo. ( pelo menos acho que nao ficaria tao dificil )…mas muito obrigado pelas orientações.
E em relação de utilizar essa mesma classe para ambas funçoes, precisaria de ajuda ( pelo menos um exemplo ), pois por estar com um tempo meio curto para mexer
nesse sistema, acabei utilizando “maneiras” diferentes de criar essas classe, e nao faço ideia de como implementá-la.

att.