Como separo o DAO da classe ControleBairro e faço uma DaoBairro?

1-Meu DAO está dentro da Classe ControleBairro, como faço para separá-lo numa DaoBairro?

2-O ConectaBanco tem o padrão Factory (Fábrica de conexão)?

       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

Este segue o padrão Factory?

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

Detalhes maiores em:
https://www.vivaolinux.com.br/topico/Java/MVC-como-separar-o-DAO-da-classe-Controle

Veja se esse exemplo te ajuda: http://www.mballem.com/post/utilizando-swing-com-banco-de-dados/?i=1

1 curtida

Muito bom artigo, saberia dizer se o padrão da conexão é factory?