MVC Dao - How do I separate the DAO from the Control Class? [closed]

-2

1-My DAO is within the Breathing Control Class, how do I separate it into a DaoBairro?

2-Does ConnectBank have Factory default?

Details here, with the codes: link

    package Controle;

import Conexao.ConectaBanco;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import modelo.ModeloBairro;



/**
 *
 * @author brainiac
 */
public class ControleBairro {
    ConectaBanco conex = new ConectaBanco();
    ConectaBanco conexPesq = new ConectaBanco();
    String cidade = null;
    int codCid = 0;

    // inserir dados no BD
    public void gravar(ModeloBairro obj) {
        conex.conexao();

        try {
            conex.executaSQL("SELECT * FROM cidade WHERE nome_cidade='"+obj.getCidade()+"'");
            conex.rs.first();
            codCid = conex.rs.getInt("id_cidade");
            PreparedStatement pst = conex.con.prepareStatement("INSERT INTO bairro (nome_bairro, id_cidade) VALUES(?, ?)");
            pst.setString(1, obj.getNome());
            pst.setInt(2, codCid);
            pst.execute();
            JOptionPane.showMessageDialog(null, "Inserido com sucesso pela Camada Controle");

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Não Inserido  pela Camada Controle!"+ex);
        }
        conex.desconecta();



    }

    // Botão Primeiro
    public ModeloBairro primeiro() {
        conex.conexao();
        ModeloBairro modBairro = new ModeloBairro();
        conexPesq.conexao();
        conex.executaSQL("SELECT * FROM bairro");
        try {
            conex.rs.first();
            conexPesq.executaSQL("SELECT * FROM cidade WHERE id_cidade=" +conex.rs.getInt("id_cidade"));
            conexPesq.rs.first();
            cidade = conexPesq.rs.getString("nome_cidade");
            modBairro.setCod(conex.rs.getInt("id_bairro"));
            modBairro.setNome(conex.rs.getString("nome_bairro"));
            modBairro.setCidade(cidade);

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "erro ao mostrar dados na  Camada Controle!"+ex);
        }
        conex.desconecta();
        conexPesq.desconecta();
        return modBairro;

    }

    // Botão anterior
    public ModeloBairro anterior() {
        conex.conexao();
        ModeloBairro modBairro = new ModeloBairro();
        conexPesq.conexao();

        try {
            conex.rs.previous();
            conexPesq.executaSQL("SELECT * FROM cidade WHERE id_cidade=" +conex.rs.getInt("id_cidade"));
            conexPesq.rs.first();
            cidade = conexPesq.rs.getString("nome_cidade");
            modBairro.setCod(conex.rs.getInt("id_bairro"));
            modBairro.setNome(conex.rs.getString("nome_bairro"));
            modBairro.setCidade(cidade);

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "erro ao mostrar dados na  Camada Controle!"+ex);
        }

        conexPesq.desconecta();
        return modBairro;

    }

    // botão próximo
    public ModeloBairro proximo() {
        conex.conexao();
        ModeloBairro modBairro = new ModeloBairro();
        conexPesq.conexao();

        try {
            conex.rs.next();
            conexPesq.executaSQL("SELECT * FROM cidade WHERE id_cidade=" +conex.rs.getInt("id_cidade"));
            conexPesq.rs.first();
            cidade = conexPesq.rs.getString("nome_cidade");
            modBairro.setCod(conex.rs.getInt("id_bairro"));
            modBairro.setNome(conex.rs.getString("nome_bairro"));
            modBairro.setCidade(cidade);

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "erro ao mostrar dados na  Camada Controle!"+ex);
        }

        conexPesq.desconecta();
        return modBairro;

    }

    // botão último
    public ModeloBairro ultimo() {
        conex.conexao();
        ModeloBairro modBairro = new ModeloBairro();
        conexPesq.conexao();
        conex.executaSQL("SELECT * FROM bairro");
        try {
            conex.rs.last();
            conexPesq.executaSQL("SELECT * FROM cidade WHERE id_cidade=" +conex.rs.getInt("id_cidade"));
            conexPesq.rs.first();
            cidade = conexPesq.rs.getString("nome_cidade");
            modBairro.setCod(conex.rs.getInt("id_bairro"));
            modBairro.setNome(conex.rs.getString("nome_bairro"));
            modBairro.setCidade(cidade);

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "erro ao mostrar dados na  Camada Controle!"+ex);
        }
        conex.desconecta();
        conexPesq.desconecta();
        return modBairro;

    }




    //Alterar dado no BD
   //Alterar dado no BD
    public void editar(ModeloBairro obj) {
        conex.conexao();
        conexPesq.conexao();
       //JOptionPane.showMessageDialog(null, obj.getCod_estado());
        try {
            conexPesq.executaSQL("SELECT * FROM cidade WHERE nome_cidade="+obj.getNome());
            conexPesq.rs.first();
            codCid= conex.rs.getInt("id_cidade");
            PreparedStatement pst= conex.con.prepareStatement("UPDATE bairro SET nome_bairro=?, id_cidade=? WHERE id_bairro=?");
            pst.setString(1, obj.getNome());
            pst.setInt(2, codCid);
            pst.setInt(3, obj.getCod());
            pst.execute();

            JOptionPane.showMessageDialog(null, "Dados Editados com sucesso pela Camada Controle!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Dados não Editados com sucesso pela Camada Controle!");
        }
        conex.desconecta();
        conexPesq.desconecta();
    }

     public void excluir(ModeloBairro obj) {
        conex.conexao();
        conexPesq.conexao();
       //JOptionPane.showMessageDialog(null, obj.getCod_estado());
        try {

            PreparedStatement pst= conex.con.prepareStatement("DELETE FROM bairro  WHERE id_bairro=?");
            pst.setInt(1, obj.getCod());
            pst.execute();

            JOptionPane.showMessageDialog(null, "Dados Excluídos com sucesso pela Camada Controle!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Dados não Excluídos com sucesso pela Camada Controle!");
        }
        conex.desconecta();
        conexPesq.desconecta();
    }


}// fim

Connection

package Conexao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class ConectaBanco {

    // importar com opçãp java.sql
    public Statement stm;  // responsável porpreparar e realizar pesquiss no BD
    public ResultSet rs;   // resp. por armazenar o resultado de uma pesquisa passada para o Statement
    public Connection con;  // resp. por 

    private String DRIVER = "org.postgresql.Driver";  // Responsável por identificar o srviço de BD
    private String URL = "jdbc:postgresql://localhost:5432/sist_estoq_venda"; // resp. por setar o local do BD
    private String USER = "postgres";
    private String PASS = "123";  // resp. por realizar a conexaão com o BD

    // Paraconectar com outro servidor devee-se mudar os valores declados como privados acima

    public void conexao(){ // Método responsável por realizaar a conxão com o BD

        try {   // tentativa inicial
            System.setProperty("jdbc.Drivers", DRIVER);  // seta  a propriedade do driver de conexão
            con = DriverManager.getConnection(URL, USER, PASS);
            //JOptionPane.showMessageDialog(null, "Conectado com sucesso!");// realiza a conexã o com o BD
        } catch (SQLException ex) {  // exceção, caso o try falhe cai aqui
             JOptionPane.showMessageDialog(null, "Erro de conexão\n Erro: " +ex.getMessage());
        }

    }

    public void executaSQL(String sql){
        try {
            stm = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);
             rs = stm.executeQuery(sql);
        } catch (SQLException ex) {
            //JOptionPane.showMessageDialog(null, "Erro NO EXECUTAsql() \n Erro: " +ex.getMessage());

        }
    }

    public void desconecta(){ // Método para fechara a conexão com o BD
        try {
            con.close();
            //JOptionPane.showMessageDialog(null, "Conexão fechada com sucesso!", "Aviso", JOptionPane.INFORMATION_MESSAGE);
        } catch (SQLException ex) {
             JOptionPane.showMessageDialog(null, "Erro ao fechara conexão \n Erro: " +ex.getMessage());
        }

    }



}

package template;

/**
 *
 * @author brainiac
 */
public class ModeloBairro {
    private int cod;
    private String nome;
    private String cidade;


    public int getCod() {
        return cod;
    }

    public void setCod(int cod) {
        this.cod = cod;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }




}

package view;

import Conexao.ConectaBanco;
import Controle.ControleBairro;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import modelo.ModeloBairro;
import modelo.ModeloTabela;

/**
 *
 * @author brainiac
 */
public class FrmBairros extends javax.swing.JFrame {

    ConectaBanco conectaBairro = new ConectaBanco();

    ModeloBairro modeloBairro = new ModeloBairro();
    ControleBairro controleBairro = new ControleBairro();
    int flag = 1;

    /**
     * Creates new form FrmBairos
     */
    public FrmBairros() {
        initComponents();
        conectaBairro.conexao();
        btnNovo.setEnabled(true);


        preencherTabela("SELECT * FROM bairro  INNER JOIN cidade ON bairro.id_cidade = cidade.id_cidade");
        atualizarCombo();

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        txtCod = new javax.swing.JTextField();
        txtNome = new javax.swing.JTextField();
        jComboBoxCidade = new javax.swing.JComboBox<>();
        jLabel3 = new javax.swing.JLabel();
        btnAdd = new javax.swing.JButton();
        btnNovo = new javax.swing.JButton();
        btnSalvar = new javax.swing.JButton();
        btnAlterar = new javax.swing.JButton();
        btnDelete = new javax.swing.JButton();
        btnPrimeiro = new javax.swing.JButton();
        btnProximo = new javax.swing.JButton();
        btnAnterior = new javax.swing.JButton();
        btnUltimo = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        btnSair = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTableBairro = new javax.swing.JTable();
        jLabel4 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Cadastro de Bairros");

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Formulário Cadastro de Bairros", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial Black", 1, 14), new java.awt.Color(255, 102, 51))); // NOI18N
        jPanel1.setEnabled(false);

        jLabel1.setText("Código:");

        jLabel2.setText("Nome:");

        txtCod.setEnabled(false);

        txtNome.setToolTipText("Nome do Bairro");

        jComboBoxCidade.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jLabel3.setText("Cidade:");

        btnAdd.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/city.png"))); // NOI18N
        btnAdd.setToolTipText("Adicionar outra Cidade, add another city");
        btnAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddActionPerformed(evt);
            }
        });

 private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {                                          
        modeloBairro.setCod(Integer.parseInt(txtCod.getText()));
        controleBairro.excluir(modeloBairro);

        btnNovo.setEnabled(true);
        btnSalvar.setEnabled(false);
        btnCancelar.setEnabled(true);
        limpar();
        txtNome.setEnabled(false);
        preencherTabela("SELECT * FROM bairro  INNER JOIN cidade ON bairro.id_cidade = cidade.id_cidade");
    }                                         

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        if (flag == 1) { //7:43
            modeloBairro.setNome(txtNome.getText());
            modeloBairro.setCidade("" + jComboBoxCidade.getSelectedItem());
            controleBairro.gravar(modeloBairro);
            preencherTabela("SELECT FROM bairro INNER JOIN cidade ON bairro.id_cidade=cidade.id_cidade ");

        } else {
            modeloBairro.setNome(txtNome.getText());
            modeloBairro.setCidade("" + jComboBoxCidade.getSelectedItem());
            controleBairro.editar(modeloBairro);
            preencherTabela("SELECT FROM bairro INNER JOIN cidade ON bairro.id_cidade=cidade.id_cidade ");
        }
        btnNovo.setEnabled(true);
        btnSalvar.setEnabled(false);
        btnCancelar.setEnabled(true);

        txtNome.setEnabled(false);
        jComboBoxCidade.setEnabled(true);
        limpar();
    }                                         

    private void btnAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        flag = 2;
        btnNovo.setEnabled(false);
        btnSalvar.setEnabled(true);
        btnCancelar.setEnabled(true);        
        txtNome.setEnabled(true);


    }                                          

    private void btnPrimeiroActionPerformed(java.awt.event.ActionEvent evt) {                                            
        modeloBairro = controleBairro.primeiro();
        txtCod.setText(String.valueOf(modeloBairro.getCod()));
        txtNome.setText(modeloBairro.getNome());
        jComboBoxCidade.setSelectedItem(modeloBairro.getCidade());


        btnDelete.setEnabled(true);
        btnAlterar.setEnabled(true);
        btnCancelar.setEnabled(true);
    }                                           

    private void btnProximoActionPerformed(java.awt.event.ActionEvent evt) {                                           
        modeloBairro = controleBairro.proximo();
        txtCod.setText(String.valueOf(modeloBairro.getCod()));
        txtNome.setText(modeloBairro.getNome());
        jComboBoxCidade.setSelectedItem(modeloBairro.getCidade());

        btnDelete.setEnabled(true);
        btnAlterar.setEnabled(true);
        btnCancelar.setEnabled(true);
    }                                          

    private void btnAnteriorActionPerformed(java.awt.event.ActionEvent evt) {                                            
        modeloBairro = controleBairro.anterior();
        txtCod.setText(String.valueOf(modeloBairro.getCod()));
        txtNome.setText(modeloBairro.getNome());
        jComboBoxCidade.setSelectedItem(modeloBairro.getCidade());

        btnDelete.setEnabled(true);
        btnAlterar.setEnabled(true);
        btnCancelar.setEnabled(true);
    }                                           

    private void btnUltimoActionPerformed(java.awt.event.ActionEvent evt) {                                          
        modeloBairro = controleBairro.ultimo();  
        txtCod.setText(String.valueOf(modeloBairro.getCod()));
        txtNome.setText(modeloBairro.getNome());
        jComboBoxCidade.setSelectedItem(modeloBairro.getCidade());

        btnDelete.setEnabled(true);
        btnAlterar.setEnabled(true);
        btnCancelar.setEnabled(true);
    }                                         

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        btnNovo.setEnabled(true);
        btnSalvar.setEnabled(false);
        btnCancelar.setEnabled(true);
        btnAlterar.setEnabled(false);
        btnDelete.setEnabled(false);
        limpar();
        txtNome.setEnabled(false);
    }                                           

    private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {                                        
        this.dispose();
    }                                       

    private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {                                       
        FrmCidades frm= new FrmCidades();
        frm.setVisible(true);
        atualizarCombo();
    }                                      

    public void preencherTabela(String SQL) {
        ArrayList dados = new ArrayList();

        String[] colunas = new String[]{"ID", "Bairro", "Cidade"};

        conectaBairro.executaSQL(SQL);
        try {
            conectaBairro.rs.first();
            // Abaixo preenchendo a tabela
            do {
                dados.add(new Object[]{
                    conectaBairro.rs.getInt("id_cidade"),
                    conectaBairro.rs.getString("nome_bairro"),
                    conectaBairro.rs.getString("nome_cidade")
                });

            } while (conectaBairro .rs.next());

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, " Erro ao preenchar o ArrayList!\n  " + ex);
        }
        ModeloTabela modelo = new ModeloTabela(dados, colunas);
        jTableBairro.setModel(modelo);
        jTableBairro.getColumnModel().getColumn(0).setPreferredWidth(40); // Width é o tamanho em pixel
        jTableBairro.getColumnModel().getColumn(0).setResizable(false); // não poderá aumentar o tamanhao com o mouse

        jTableBairro.getColumnModel().getColumn(1).setPreferredWidth(300);
        jTableBairro.getColumnModel().getColumn(1).setResizable(false);

        jTableBairro.getColumnModel().getColumn(2).setPreferredWidth(250);
        jTableBairro.getColumnModel().getColumn(2).setResizable(false);

        // chamando a tabela
        jTableBairro.getTableHeader().setReorderingAllowed(false);
        jTableBairro.setAutoResizeMode(jTableBairro.AUTO_RESIZE_OFF);
        jTableBairro.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // vai poder slecionar apenas 1 eleento desta tabela

    }

    public void atualizarCombo() {

        jComboBoxCidade.removeAllItems();  // REmove, limpa todos os itens do comboBox, para pode armazenar em seguida
        try {
            conectaBairro.executaSQL("SELECT * FROM cidade ORDER BY nome_cidade");
            conectaBairro.rs.first(); //  para preencher tabela precisa estar posicionado no primeiro registro
            do {
                jComboBoxCidade.addItem(conectaBairro.rs.getString("nome_cidade"));
            } while (conectaBairro.rs.next());
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(rootPane, "Erro ao preencher ComboBox cidade!" + ex);
        }
    
asked by anonymous 03.09.2017 / 17:15

1 answer

1

Good

You need to know what the MVC is. I would say you do not understand it and what each layer has.

The model M communicates with the controller C which in turn communicates with the view V. DAO is a model clearly.

In these cases, the ideal would be to implement an extra layer to contain the logic of the models. A modelController.

A trivial example would be.

Model:

-id

-user

-

modelController:

-getTeenagers ()

controller

-didCLickToDisplayTeenagers ()

Here, the view calls the didClickDisplayTeenagers that calls the getTeenagers that knows how to communicate with the model. Of course the data has to come from somewhere. In this case it would be another modelController that binds to a webService for example.

I think with these concepts you can do it. Either way you should refresh your knowledge of design patterns and try not to get code but to understand how all the pieces work. Be careful too the anti-patterns.

    
03.09.2017 / 23:16