Aprenda Java com Banco de Dados

  • Página Inicial
  • Contato!
  • Tudo sobre Java com Banco de Dados Parte 1!
  • Tudo sobre Java com Banco de Dados Parte 2!
  • Tudo sobre Java com Banco de Dados Parte 3!
  • Tudo sobre Java com Banco de Dados Parte 4!
  • Tudo sobre Java com Banco de Dados Parte 5!
  • Tudo sobre Java com Banco de Dados Parte 6!
  • Tudo sobre Java com Banco de Dados Parte 7!
  • Tudo sobre Java com Banco de Dados Parte 7

    Preenchendo JTable

    No View Eleitor, vá nas propriedades da tabela e em model, coloque as colunas referentes para ID, nome, CPF, CEP, Rua, Bairro e Número, e tire a opção editable deles. Também deixe o Rows como 0.

    Altere o name da tabela para paneEle e altere o construtor assim, para permitir ordenação:

    
    public ViewEleitor() {
        initComponents();
    
        DefaultTableModel mode = (DefaultTableModel)paneEle.getModel(); // Importe javax.swing.table.DefaultTableModel
    
        paneEle.setRowSorter(new TableRowSorter(mode)); // Importe javax.swing.table.TableRowSorter
    }
    
    

    Vamos criar a classe EleitorDAO em model.dao, com esse código:

    
    package model.dao;
    
    import connection.ConnectionFactory;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import javax.swing.JOptionPane;
    import model.bean.Eleitor;
    
    public class EleitorDAO {
        private Connection con = null; // Importar java.sql.Connection
        
        public EleitorDAO() {
            con = ConnectionFactory.getConnection(); // Importar connection.ConnectionFactory
        }
    
        public void create(Eleitor e) {
            PreparedStatement stmt = null;
            String sql = "insert into eleitor (nome, cpf, cep, rua, bairro, numero) values (?, ?, ?, ?, ?, ?)"; // Inserir os dados do SQL.
            
            try {
                stmt = con.prepareStatement(sql);
    
                stmt.setString(1, e.getNome());
                stmt.setString(2, e.getCpf());
                stmt.setString(3, e.getCep());
                stmt.setString(4, e.getRua());
                stmt.setString(5, e.getBairro());
                stmt.setInt(6, e.getNumero());
                
                stmt.executeUpdate();
                
                JOptionPane.showMessageDialog(null, "Salvo com Sucesso!", "Informação", JOptionPane.INFORMATION_MESSAGE);
            }
            catch(SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro ao Salvar!\n\n" + ex, "Erro", JOptionPane.ERROR_MESSAGE);
            }
            finally {
                ConnectionFactory.closeConnection(con, stmt);
            }
        }
    }
    
    

    E no action do botão Salvar, em ViewEleitor:

    
    if(txtNome.getText().trim().equals("") || txtCPF.getText().trim().length() != 14 || txtCEP.getText().trim().length() != 9 || txtRua.getText().trim().equals("") || txtBair.getText().trim().equals("")) {
        JOptionPane.showMessageDialog(null, "Preencha Todos os Campos!", "Aviso", JOptionPane.WARNING_MESSAGE);
    }
    else {
        Eleitor e = new Eleitor(); // Importe
        EleitorDAO dao = new EleitorDAO(); // Importe
                
        e.setNome(txtNome.getText().trim());
        e.setCpf(txtCPF.getText().trim());
        e.setCep(txtCEP.getText().trim());
        e.setRua(txtRua.getText().trim());
        e.setBairro(txtBair.getText().trim());
        e.setNumero((int)numEle.getValue());
                
        dao.create(e);
                
        txtNome.setText("");
        txtCPF.setText("");
        txtCEP.setText("");
        txtRua.setText("");
        txtBair.setText("");
        numEle.setValue(0);
    }
    
    

    Vá em EleitorDAO e coloque esse método:

    
    public List<Eleitor> read() { // Importe java.util.List
        PreparedStatement stmt = null;
        ResultSet rs = null; // Importe
        String sql = "select * from eleitor";
    
        List<Eleitor> eleitores = new ArrayList<>();
    
        try {
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();
    
            while(rs.next()) {
                Eleitor elei = new Eleitor();
    
                elei.setId(rs.getInt("id"));
                elei.setNome(rs.getString("nome"));
                elei.setCpf(rs.getString("cpf"));
                elei.setCep(rs.getString("cep"));
                elei.setRua(rs.getString("rua"));
                elei.setBairro(rs.getString("bairro"));
                elei.setNumero(rs.getInt("numero"));
    
                eleitores.add(elei);
            }
        }
        catch(SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao Consultar!\n\n" + ex, "Erro", JOptionPane.ERROR_MESSAGE);
        }
        finally {
            ConnectionFactory.closeConnection(con, stmt, rs);
        }
    
        return eleitores;
    }
    
    

    No código do frame do ViewEleitor, crie esse método:

    
    public void lerTable() {
        DefaultTableModel mode = (DefaultTableModel)paneEle.getModel();
    
        EleitorDAO edao = new EleitorDAO();
        
        mode.setNumRows(0); // Isso é pra evitar duplicação nas consultas.
    
        for(Eleitor e: edao.read()) {
            mode.addRow(new Object[] {
                e.getId(),
                e.getNome(),
                e.getCpf(),
                e.getCep(),
                e.getRua(),
                e.getBairro(),
                e.getNumero()
            });
        }
    }
    
    

    E no construtor, coloque a invocação desse método simplesmente com this.lerTable();. A mesma invocação também será colocada no action do botão salvar, abaixo do dao.create() (dentro dos if, caso existam, na última linha).

    Removendo Registros

    Crie em EleitorDAO esse método:

    
    public void delete(Eleitor e) {
        PreparedStatement stmt = null;
        String sql = "delete from eleitor where id = ?"; // Inserir os dados do SQL.
    
        try {
            stmt = con.prepareStatement(sql);
            stmt.setInt(1, e.getId());
    
            stmt.executeUpdate();
    
            JOptionPane.showMessageDialog(null, "Excluído com Sucesso!", "Informação", JOptionPane.INFORMATION_MESSAGE);
        }
        catch(SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao Excluir!\n\n" + ex, "Erro", JOptionPane.ERROR_MESSAGE);
        }
        finally {
            ConnectionFactory.closeConnection(con, stmt);
        }
    }
    
    

    E simplesmente coloque esse código no evento do botão excluir:

    
    private void btnExclActionPerformed(java.awt.event.ActionEvent evt) {                                        
        if(paneEle.getSelectedRow() != -1) {
            Eleitor elei = new Eleitor(); // Importe
            EleitorDAO dao = new EleitorDAO(); // Importe
    
            elei.setId((int)paneEle.getValueAt(paneEle.getSelectedRow(), 0));
    
            dao.delete(elei);
            
            txtNome.setText("");
            txtCPF.setText("");
            txtCEP.setText("");
            txtRua.setText("");
            txtBair.setText("");
            numEle.setValue(0);
    
            this.lerTable();
        }
        else {
            JOptionPane.showMessageDialog(null, "Selecione algum item para excluir!", "Aviso", JOptionPane.WARNING_MESSAGE); // Importe javax.swing.JOptionPane
        }
    }  
    
    

    Abrindo Novos Frames

    Abra os Views de Eleitor, Urna e Candidado, e nas propriedades deles coloque a opção DISPOSE em defaultCloseOperation:

    Adicione os eventos nos botões de Eleitor, Urna e Candidado no ViewPrincipal. Esse é o código de um deles:

    
    new ViewEleitor().setVisible(true);
    
    

    Abra o frame ViewEleitor e coloque esse código no evento do botão Novo:

    
    txtNome.setText("");
    txtCPF.setText("");
    txtCEP.setText("");
    txtRua.setText("");
    txtBair.setText("");
    numEle.setValue(0);
    
    

    Os outros botões trabalharemos depois.