Aplicação do modelo SINGLETON

bom dia galera,

Estou implementando uma classe banco de dados(clsBancodeDados) que é um classe que faz conexão com um banco acess, uma classe login, classe clsAlunos, é um programinha para cadastro de alunos, queria usar nesse classes o modelo de padrão de projeto singleton, mas estou tendo duvidas de como aplicar ele! segue abaixo as classes!

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

/*

  • frmLogin.java
  • Created on 20/04/2010, 22:15:34
    */
    package massa;

/**
*

  • @author Adauto
    */
    import java.awt.Dimension;
    import java.sql.SQLException;
    import javax.swing.JOptionPane;

// Variables declaration - do not modify
// Variables declaration - do not modify
// Variables declaration - do not modify
public class frmLogin extends javax.swing.JFrame {

frmPrincipal menuPrincipal;

/** Creates new form frmLogin */
public frmLogin() {
    //setLocationRelativeTo( null );

    //CENTRALIZAR O JFRAME
    Dimension dimension = this.getToolkit().getScreenSize();
    int x = (int) (dimension.getWidth() - this.getSize().getWidth()) / 3;
    int y = (int) (dimension.getHeight() - this.getSize().getHeight()) / 4;
    this.setLocation(x, y);
    //FIM DO CENTRALIZA

    initComponents();
}
private static AdministradorDAO administradorDAO;

public static AdministradorDAO getInstance(){
    if(AdministradorDAO.administradorDAO == null){
        AdministradorDAO.administradorDAO = new AdministradorDAO();
    }
    return AdministradorDAO.administradorDAO;
}

protected AdministradorDAO(){
}
/** 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() {

    pnlLogin = new javax.swing.JPanel();
    lblLogin = new javax.swing.JLabel();
    lblUsuario = new javax.swing.JLabel();
    lblSenha = new javax.swing.JLabel();
    lblIcone = new javax.swing.JLabel();
    txtUsuario = new javax.swing.JTextField();
    txtSenha = new javax.swing.JPasswordField();
    btnConectar = new javax.swing.JButton();
    btnCancelar = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    pnlLogin.setBackground(new java.awt.Color(240, 240, 0));
    pnlLogin.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

    lblLogin.setFont(new java.awt.Font("Cambria", 1, 36));
    lblLogin.setText("LOGIN");

    lblUsuario.setFont(new java.awt.Font("Tahoma", 0, 14));
    lblUsuario.setText("Usuário:");

    lblSenha.setFont(new java.awt.Font("Tahoma", 0, 14));
    lblSenha.setText("Senha:");

    lblIcone.setIcon(new javax.swing.ImageIcon("C:\\Users\\Adauto\\Desktop\\ICONES\\user.png")); // NOI18N

    txtUsuario.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            txtUsuarioActionPerformed(evt);
        }
    });

    txtSenha.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            txtSenhaActionPerformed(evt);
        }
    });

    btnConectar.setIcon(new javax.swing.ImageIcon("C:\\Users\\Adauto\\Desktop\\ICONES\\Login.png")); // NOI18N
    btnConectar.setText("Conectar");
    btnConectar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnConectarActionPerformed(evt);
        }
    });

    btnCancelar.setIcon(new javax.swing.ImageIcon("C:\\Users\\Adauto\\Desktop\\ICONES\\Cancelar.png")); // NOI18N
    btnCancelar.setText("Cancelar");
    btnCancelar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnCancelarActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout pnlLoginLayout = new javax.swing.GroupLayout(pnlLogin);
    pnlLogin.setLayout(pnlLoginLayout);
    pnlLoginLayout.setHorizontalGroup(
        pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(pnlLoginLayout.createSequentialGroup()
            .addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(pnlLoginLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(lblSenha))
                    .addGroup(pnlLoginLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(lblUsuario))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlLoginLayout.createSequentialGroup()
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(lblLogin)
                        .addGap(42, 42, 42)))
                .addGroup(pnlLoginLayout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(txtSenha, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(txtUsuario, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 129, Short.MAX_VALUE))))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(lblIcone, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE)
            .addContainerGap())
        .addGroup(pnlLoginLayout.createSequentialGroup()
            .addGap(44, 44, 44)
            .addComponent(btnConectar)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 102, Short.MAX_VALUE)
            .addComponent(btnCancelar)
            .addGap(79, 79, 79))
    );
    pnlLoginLayout.setVerticalGroup(
        pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(pnlLoginLayout.createSequentialGroup()
            .addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(pnlLoginLayout.createSequentialGroup()
                    .addGap(26, 26, 26)
                    .addComponent(lblLogin)
                    .addGap(27, 27, 27)
                    .addComponent(lblUsuario)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(txtUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(lblSenha)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(txtSenha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(pnlLoginLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(lblIcone, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
            .addGap(19, 19, 19)
            .addGroup(pnlLoginLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(btnConectar)
                .addComponent(btnCancelar))
            .addGap(55, 55, 55))
    );

    getContentPane().add(pnlLogin, java.awt.BorderLayout.CENTER);

    pack();
}// </editor-fold>                        

private void txtSenhaActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
}                                        

private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                            
    System.exit(0);
}                                           

private void txtUsuarioActionPerformed(java.awt.event.ActionEvent evt) {                                           
}                                          

    private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        if (txtUsuario.getText().isEmpty()) {
            javax.swing.JOptionPane.showMessageDialog(this, "preencha seu usuario");
            return;
            // TODO add your handling code here:
    }                                           
    if (txtSenha.getText().isEmpty()) {
        javax.swing.JOptionPane.showMessageDialog(this, "entre com senha");
        return;
    }
    try {
        clsBancoDeDados.rs = clsBancoDeDados.comando.executeQuery
       ("select * from login where usuario = '"+
                         txtUsuario.getText() + "' and senha = '" +
                         txtSenha.getText() + "'");
      
        if (clsBancoDeDados.rs.next()) {
            if (menuPrincipal == null) {
                menuPrincipal = new frmPrincipal(this);
            }
            menuPrincipal.permissoes(clsBancoDeDados.rs.getString("permissao"));
            txtSenha.setText("");
            this.setVisible(false);
            menuPrincipal.setVisible(true);
            //menuPrincipal.permissoes(clsBancoDeDados.rs.getString("permissao"));
        }
        else
            JOptionPane.showMessageDialog(this, "Usuário ou Senha Incorretos!");
        
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(this,"erro de autenticação");
    }
}
// Variables declaration - do not modify                     
private javax.swing.JButton btnCancelar;
private javax.swing.JButton btnConectar;
private javax.swing.JLabel lblIcone;
private javax.swing.JLabel lblLogin;
private javax.swing.JLabel lblSenha;
private javax.swing.JLabel lblUsuario;
private javax.swing.JPanel pnlLogin;
private javax.swing.JPasswordField txtSenha;
private javax.swing.JTextField txtUsuario;
// End of variables declaration                   

}

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    /
    /
    *
  • @author Adauto
    /
    /
  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package massa;

import java.sql.;
import javax.swing.
;

/**
*

*/
public class clsBancoDeDados {

static Connection conexao;
static Statement comando;
static ResultSet rs;
//ALUNOS
static Integer codaluno;
static Integer codmodalidade;
static Integer codpromocao;
/*static String nomealuno;
static Date datanasc;
static String profissao;
static String endereco;
static String nro;
static String apto;
static String bairro;
static String telefone;
static String celular;*/

public static void main(String args[]) throws InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {

    try {
        //PARA COLOCAR O FORMATO WINDOWS
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            //Para Setar as opções Yes=Sim e No=Não
            UIManager.put("OptionPane.yesButtonText", "Sim");
            UIManager.put("OptionPane.noButtonText", "Não");
        } catch (ClassNotFoundException classNotFoundException) {
        } catch (InstantiationException instantiationException) {
        } catch (IllegalAccessException illegalAccessException) {
        } catch (UnsupportedLookAndFeelException unsupportedLookAndFeelException) {
        }

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        conexao = DriverManager.getConnection("jdbc:odbc:bdEngenharia");
        comando = conexao.createStatement();
        //testa danco
        rs = comando.executeQuery("select * from login");
        while (rs.next()) {
            System.out.println(rs.getString("usuario"));
            System.out.println(rs.getString("senha"));
            System.out.println(rs.getString("permissao"));
        }
        // rs = comando.executeQuery("select * from dados");
        //while (rs.next()) {
        //System.out.println(rs.getString("nome"));
        //System.out.println(rs.getString("dados"));
        //}
    } catch (ClassNotFoundException e) {
        JOptionPane.showMessageDialog(null,
                "Erro de Conexao com Banco de Dados" + e);
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(null,
                "Erro de Sintaxe SQL" + e);
    }
    frmLogin login = new frmLogin();
    login.setVisible(true);
}

;

}

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package massa;

import java.sql.Date;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import javax.swing.JTable;

/**
*

  • @author Adauto mendes
    */
    public class clsAlunos {
    private Integer codaluno;
    private String nomealuno;
    private Date datanasc;
    private String profissao;
    private String endereco;
    private String nro;
    private String apto;
    private String bairro;
    private String telefone;
    private String celular;

    public boolean AtualizarTabela(JTable jTableAlunos){
    try{
    clsBancoDeDados.rs = clsBancoDeDados.comando.executeQuery(“select * from alunos order by nomealuno ASC”);

        javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel)jTableAlunos.getModel();
        int cont = dtm.getRowCount();
        for(int i = 0; i < cont; i++) dtm.removeRow(0);
        while(clsBancoDeDados.rs.next()) {
    
            dtm.addRow(new Object[]{(Integer)clsBancoDeDados.rs.getInt("codaluno"),clsBancoDeDados.rs.getString("nomealuno"),clsBancoDeDados.rs.getDate("datanasc"),clsBancoDeDados.rs.getString("profissao"),clsBancoDeDados.rs.getString("endereco"),clsBancoDeDados.rs.getString("numero"),clsBancoDeDados.rs.getString("apto"),clsBancoDeDados.rs.getString("bairro"),clsBancoDeDados.rs.getString("telefone"),clsBancoDeDados.rs.getString("celular")});
    
        }
     } catch(SQLException e) {
              System.out.println(e.getMessage());
         return false;
     }
     return true;
    

}

public Integer getCodaluno() {
    return codaluno;
}

public void setCodaluno(Integer codaluno) {
    this.codaluno = codaluno;
}

public String getNomealuno() {
    return nomealuno;
}

public void setNomealuno(String nomealuno) {
    this.nomealuno = nomealuno;
}

public Date getDatanasc() {
    return datanasc;
}

public void setDatanasc(Date datanasc) {
    this.datanasc = datanasc;
}

public String getProfissao() {
    return profissao;
}

public void setProfissao(String profissao) {
    this.profissao = profissao;
}

public String getEndereco() {
    return endereco;
}

public void setEndereco(String endereco) {
    this.endereco = endereco;
}

public String getNro() {
    return nro;
}

public void setNro(String nro) {
    this.nro = nro;
}

public String getApto() {
    return apto;
}

public void setApto(String apto) {
    this.apto = apto;
}

public String getBairro() {
    return bairro;
}

public void setBairro(String bairro) {
    this.bairro = bairro;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String getCelular() {
    return celular;
}

public void setCelular(String celular) {
    this.celular = celular;
}

}

  1. Quando for postar código, use a tag code:
seu código
  1. A conexão não é um recurso único. Portanto, não é o caso de se utilizar o Singleton.
    Você precisa mais de uma conexão em vários casos: quando for usar threads, quando o sistema ficar ocioso (a conexão morrerá e vc precisará de outra). No lugar do Singleton, procure usar um pool de conexões, como o Jakarta DBCP.

Aliás, muito dificilmente o Singleton será necessário em um projeto. Em 99% dos casos, há um padrão melhor, ou se trata de uma aplicação inadequada do padrão.

Então, mas na verdade eu queria aplicar ele nesse codigo só pra fazer um trabalho de faculdade!

att