Versão atual:

java commit e rollback

Pessoa é a primeira vez que mexo com commit e rollback não sei como aplica direito, tipo tenho um método na minha VIEW que cadastrar clientes (para cadastrar clientes tem que inserir em na tebela clientes e endreço do banco de dados mysql);

quero que se uma das operaçoes cair no exception aconteça de abortar tudo o métoda da view ta assim:

//método para salvar cliente
    private void salvar() throws SQLException {

        String sql = "{CALL ENDERECO_INSERT_CLIENTE(?,?,?,?,?,?,?) }";

        //criando instancias de ClienteBean e EnderecoBean
        ClienteBean cb = new ClienteBean();
        EnderecoBean eb = new EnderecoBean();

        //criando instancias de ClienteDao e EnderecoDao
        ClienteDAO cd = new ClienteDAO();
        EnderecoDAO ed = new EnderecoDAO();

        //testa se campos obrigatrios estao vazios
        if ((TXTNome.getText().equals("")) || (TXTEndereco.getText().equals("")) || (TXTNumero.getText().equals(""))
                || (TXTBairro.getText().equals("")) || (TXTCidade.getText().equals("")) || (FTXTestado.getText().equals(""))
                || (FTXTcnpj.getText().replaceAll("[. . / -]", "").trim().equals("")) & (FTXTcpf.getText().replaceAll("[. . -]", "").trim().equals(""))) {

            JOptionPane.showMessageDialog(null, "Os campos com * são obrigatórios", "Erro", JOptionPane.ERROR_MESSAGE);

        } else {

            //setando valores de cliente e endereco nos seus devidos setters do pacote Bean
            cb.setNome(TXTNome.getText().toUpperCase());
            eb.setCep(FTXTcep.getText().replaceAll("[-]", ""));
            eb.setRua(TXTEndereco.getText().toUpperCase());
            eb.setNumero(Integer.parseInt(TXTNumero.getText()));
            eb.setComplemento(TXTComplemento.getText().toUpperCase());
            eb.setBairro(TXTBairro.getText().toUpperCase());
            eb.setCidade(TXTCidade.getText().toUpperCase());
            eb.setEstado(FTXTestado.getText().toUpperCase());
            cb.setTelefone(FTXTtelefone.getText().replaceAll("[()-]", "").trim());
            cb.setCelular(FTXTcelular.getText().replaceAll("[()-]", "").trim());
            cb.setEmail(TXTEmail.getText());
            cb.setCpf(FTXTcpf.getText().replaceAll("[.-]", "").trim());
            cb.setCnpj(FTXTcnpj.getText().replaceAll("[./-]", "").trim());
            cb.setRg(TXTRg.getText().toUpperCase());

            //inserir na tabela clientes
            cd.insert(cb);

            //inserindo na tabela endereço
            ed.insert(eb, sql);

            //mostra mensagem de cadastro realizado
            JOptionPane.showMessageDialog(null, "Cadastro realizado com sucesso");

            //fechando tela de cadastro
            dispose();

            //invoca tela principal
            new JF_Tela_Principal_Clientes().setVisible(true);

        }

    }

Na minha classe DAO tenho os métodos que se "comunicao" com o banco de dados

para inserir em cliente

//método para inserir na table clientes
    public void insert(ClienteBean cb) throws SQLException {

        //querry com campos a serem inseridos        
        String sql = "{CALL clientes_insert(?,?,?,?,?,?,?)}";

        try (PreparedStatement ps = con.prepareStatement(sql)) {

            ps.setString(1, cb.getNome());
            ps.setString(2, cb.getTelefone());
            ps.setString(3, cb.getCelular());
            ps.setString(4, cb.getEmail());
            ps.setString(5, cb.getCnpj());
            ps.setString(6, cb.getCpf());
            ps.setString(7, cb.getRg());

            ps.execute();

            con.commit();

        } catch (Exception e) {

            con.rollback();

            JOptionPane.showMessageDialog(null, e.getMessage());

        }

    }

E na minha Classe DAO de endereco tenho esse metodo aqui para inserir em endereço

public void insert(EnderecoBean eb, String procedure) throws SQLException {

        try (CallableStatement ps = con.prepareCall(procedure)) {

            ps.setString(1, eb.getRua());
            ps.setInt(2, eb.getNumero());
            ps.setString(3, eb.getComplemento());
            ps.setString(4, eb.getBairro());
            ps.setString(5, eb.getCidade());
            ps.setString(6, eb.getEstado());
            ps.setString(7, eb.getCep());

            ps.execute();

            con.commit();

        } catch (Exception e) {

            con.rollback();

            JOptionPane.showMessageDialog(null, e.getMessage());

        }

    }

Só avisando que nos método construtores das duas Clases DAO eu abro a conexao via jdbc e depois dou um

con.autoCommit(false);

Se vocês tiverem alguma dica se estou fazendo certo ou não ou se puderem indicar um artigo ou video aula fico muito agradecido

Versão(1):

Ver a versão formatada

java commit e rollback

Comentário

new question