MVC Dao - How Do I Separate DAO from the Control Class?

Asked

Viewed 609 times

-2

1-My DAO is inside the Control Class, as I do to separate it in a Daobairro?

2-The Connected Bank has Factory Standard (Connection Factory)?

Details here, with the codes: https://www.vivaolinux.com.br/topico/Java/MVC-como-separar-o-DAO-da-classe-Controle

    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());
        }

    }



}

model package;

/**
 *
 * @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;

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);
        }
  • Please read this: https://pt.meta.stackoverflow.com/a/5484/28595

  • Okay, the problem was the link? The code is there

  • I could summarize this code by posting exactly what you need. But it seems to me that you don’t know what MVC is. https://answall.com/a/55490/7130 I recommend deleting your question and refocusing it on your problem. A not something "I have it, I want to do it, do it for me"

  • Leonan, the Code is already in MVC, but Dao is next to the control class, I would just like to know how to create a separate Dao class

1 answer

1

Good

You need to know what MVC is. I’d say you don’t understand it and what each layer has.

The model M, communicates with the controller C which in turn communicates with the view V. The 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

-age

modelController:

-getTeenagers()

controller

-didCLickToDisplayTeenagers()

Here, the view calls the didClickDisplayTeenagers that calls 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 connects to a webservice for example.

I think with these concepts you’ll be fine. Anyway you should refresh your knowledge of Patterns design and not try to get code but understand how all parts work. Be careful also to anti-patterns.

  • I’m looking for the knowledge, the code is already in MVC but I just wanted to separate the Dao Class, which in the current code is within the control.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.