Ir ao conteúdo
  • Cadastre-se

Criar método para consultar clientes por código


Posts recomendados

Olá, faço técnico de informática e o meu professor passou um método para consultar clientes e pediu para refaze-lo consultando por nome e por codigo.
Alguém pode me ensinar como fazer? Preciso de uma explicação para poder aprender.
Desde já, obrigado!

 

public List<Cliente> consultarTodosClientesDAO() throws Exception {
        List<Cliente> listaSaida = new ArrayList<Cliente>();
        Cliente cliente = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        Connection conn = null;
        try {
            conn = ConnectionFactory.getConnection();
            String sql = "SELECT "
                    + "COD_CLIENTE "
                    + ", NOME "
                    + ", SOBRENOME "
                    + ", CPF "
                    + ", ENDERECO "
                    + ", CIDADE "
                    + ", ESTADO "
                    + ", FLG_ATIVO "
                    + "FROM CLIENTE";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();
            while (rs.next()) {
                cliente = new Cliente();
                cliente.setCodCliente(rs.getInt("COD_CLIENTE"));
                cliente.setNome(rs.getString("NOME"));
                cliente.setSobrenome(rs.getString("SOBRENOME"));
                cliente.setCpf(rs.getString("CPF"));
                cliente.setEndereco(rs.getString("ENDERECO"));
                cliente.setCidade(rs.getString("CIDADE"));
                cliente.setEstado(rs.getString("ESTADO"));
                cliente.setFlgAtivo(rs.getBoolean("FLG_ATIVO"));
                listaSaida.add(cliente);
                cliente = null;
            }
            conn.close();
        } catch (Exception ex) {
            throw ex;
        }
        return listaSaida;
    }

 

Link para o comentário
Compartilhar em outros sites

Nesse caso, você precisa montar uma query SQL diferente, utilizando a instrução WHERE ....

algo como: SELECT * FROM CLIENTE WHERE NOME='meu nome';

 

Para construir isso com java você pode fazer assim:

 

String sql = "SELECT "

                    + "COD_CLIENTE "

                    + ", NOME "

                    + ", SOBRENOME "

                    + ", CPF "

                    + ", ENDERECO "

                    + ", CIDADE "

                    + ", ESTADO "

                    + ", FLG_ATIVO "

                    + "FROM CLIENTE"

                    + "WHERE COD_CLIENTE = " + codCliente + " AND NOME = '" + nomeCliente + "';

tanto codCliente e nomeCliente são passados via parâmetro no método da DAO ...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
Em 11/11/2016 às 14:15, psykotico disse:

Nesse caso, você precisa montar uma query SQL diferente, utilizando a instrução WHERE ....

algo como: SELECT * FROM CLIENTE WHERE NOME='meu nome';

 

Para construir isso com java você pode fazer assim:

 

String sql = "SELECT "

                    + "COD_CLIENTE "

                    + ", NOME "

                    + ", SOBRENOME "

                    + ", CPF "

                    + ", ENDERECO "

                    + ", CIDADE "

                    + ", ESTADO "

                    + ", FLG_ATIVO "

                    + "FROM CLIENTE"

                    + "WHERE COD_CLIENTE = " + codCliente + " AND NOME = '" + nomeCliente + "';

tanto codCliente e nomeCliente são passados via parâmetro no método da DAO ...

 

Dessa forma que tu fez seria para mostrar ambos no mesmo método, tanto cod como nome?

 

Link para o comentário
Compartilhar em outros sites

19 minutos atrás, Paulo Henrique Alves disse:

 

Dessa forma que tu fez seria para mostrar ambos no mesmo método, tanto cod como nome?

 

Não ... o retorno será todos os dados que você colocou após o comando SELECT. (No caso COD_CLIENTE, NOME, SOBRENOME, CPF, ENDERECO, CIDADE, ESTADO e FLG_ATIVO) ...

 

A cláusula WHERE serve para você filtrar os dados da pesquisa.
 

quando eu digo:

"WHERE COD_CLIENTE = " + codCliente;

Significa que, dentro de todos os dados da tabela Cliente, retorne apenas os registros cuja a coluna COD_CLIENTE seja igual ao valor da variável codCliente. Agora quando eu digo isso:

"WHERE COD_CLIENTE = " + codCliente + " AND NOME = '" + nomeCliente + "'";

Significa que a requisição retornará apenas os registros cuja a coluna COD_CLIENTE seja igual ao valor da variável codCliente E a coluna NOME seja igual ao valor da variável nomeCliente ... Nesse caso segue a regra do AND da programação ... se um dos valores retornar falso, o registro será ignorado ...

Então bem simples, a pesquisa mais básica é:
SELECT
<os campos que você quer que retorne>

FROM
<tabela(s) onde estão as informações a serem pesquisadas>
WHERE
<cláusula de filtragem de informação>

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, psykotico disse:

Não ... o retorno será todos os dados que você colocou após o comando SELECT. (No caso COD_CLIENTE, NOME, SOBRENOME, CPF, ENDERECO, CIDADE, ESTADO e FLG_ATIVO) ...

 

A cláusula WHERE serve para você filtrar os dados da pesquisa.
 

quando eu digo:


"WHERE COD_CLIENTE = " + codCliente;

Significa que, dentro de todos os dados da tabela Cliente, retorne apenas os registros cuja a coluna COD_CLIENTE seja igual ao valor da variável codCliente. Agora quando eu digo isso:


"WHERE COD_CLIENTE = " + codCliente + " AND NOME = '" + nomeCliente + "'";

Significa que a requisição retornará apenas os registros cuja a coluna COD_CLIENTE seja igual ao valor da variável codCliente E a coluna NOME seja igual ao valor da variável nomeCliente ... Nesse caso segue a regra do AND da programação ... se um dos valores retornar falso, o registro será ignorado ...

Então bem simples, a pesquisa mais básica é:
SELECT
<os campos que você quer que retorne>

FROM
<tabela(s) onde estão as informações a serem pesquisadas>
WHERE
<cláusula de filtragem de informação>


Mas usando isso eu consigo fazer a pesquisa por cod e por nome? ou tenho que criar outro pra pesquisar por nome?

 

Mais uma coisa, consigo usar o mesmo jframe que usei pra consultar todos os clientes ou devo criar outro?

Link para o comentário
Compartilhar em outros sites

Citação

Mas usando isso eu consigo fazer a pesquisa por cod e por nome? ou tenho que criar outro pra pesquisar por nome?

Sim, você consegue fazer a pesquisa por cod e nome

 

Citação

Mais uma coisa, consigo usar o mesmo jframe que usei pra consultar todos os clientes ou devo criar outro?

Sim, não há problema nenhum nisso, desde que você não mude o retorno do SQL ... 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, psykotico disse:

Sim, você consegue fazer a pesquisa por cod e nome

 

Sim, não há problema nenhum nisso, desde que você não mude o retorno do SQL ... 

Beleza cara, vou testar hoje na escola porque não estou conseguindo instalar o mysql administrator para poder dar restore no banco.

Pode me ajudar com a parte do jframe?

 

Aqui está assim:

public class ConsultarClienteView extends javax.swing.JFrame {

    /**
     * Creates new form ConsultarClienteView
     */
    public ConsultarClienteView() {
        initComponents();
    }

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

        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButtonConsultar = new javax.swing.JButton();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTableTabela = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();

        jButton1.setText("jButton1");

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButtonConsultar.setText("Consultar");
        jButtonConsultar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonConsultarActionPerformed(evt);
            }
        });

        jTableTabela.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane3.setViewportView(jTableTabela);

        jLabel1.setText("Nome");

        jLabel2.setText("Código");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(66, 66, 66)
                        .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(74, 74, 74)
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(38, 38, 38)
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButtonConsultar)))
                .addContainerGap(243, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2)
                    .addComponent(jButtonConsultar)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE)
                .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 284, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(38, 38, 38))
        );

        setSize(new java.awt.Dimension(777, 457));
    }// </editor-fold>                        

    private void jButtonConsultarActionPerformed(java.awt.event.ActionEvent evt) {                                                 

        try {
            //Criar uma variável do tipo List<Cliente> e atribuir o retorno do método respectivo da camada Service.

            List<Cliente> listaClientes = ClienteService.consultarTodosClientesService();

            //Se esta lista estiver nula ou vazia, exibir mensagem na tela. Caso contrário, preencher a tabela.
            if ((listaClientes == null) || (listaClientes.isEmpty())) {

                JOptionPane.showMessageDialog(this, "Nenhum item encontrado para esta lista", "Sem Resultado", JOptionPane.INFORMATION_MESSAGE);
            } else {

                //Carregar dados na tabela
                //Cria um DefaultTableModel
                DefaultTableModel modeloTabela = new DefaultTableModel();

                //Monta os cabeçalhos das colunas da tabela
                modeloTabela.addColumn("Codigo");
                modeloTabela.addColumn("Nome");
                modeloTabela.addColumn("Sobrenome");
                modeloTabela.addColumn("CPF");
                modeloTabela.addColumn("Endereço");
                modeloTabela.addColumn("Cidade");
                modeloTabela.addColumn("UF");
                modeloTabela.addColumn("Ativo");

        
                //Para cada cliente retornado na lista, preencher uma tabela
                for (Cliente c : listaClientes) {

                    //Cria uma linha 'genérica' com a quantidade de colunas do modelTabela
                    Object[] vetorLinhas = new Object[modeloTabela.getColumnCount()];

                    //Preenche as colunas de cada linha do vetorLinhas para preencher com os dados do Cliente
                    vetorLinhas[0] = c.getCodCliente();
                    vetorLinhas[1] = c.getNome();
                    vetorLinhas[2] = c.getSobrenome();
                    vetorLinhas[3] = c.getCpf();
                    vetorLinhas[4] = c.getEndereco();
                    vetorLinhas[5] = c.getCidade();
                    vetorLinhas[6] = c.getEstado();
                    vetorLinhas[7] = c.getFlgAtivo();

                    modeloTabela.addRow(vetorLinhas);

                }

                //desabilita selecao de colunas na tabela
                jTableTabela.setColumnSelectionAllowed(false);
                
                //desabilita selecao de celulas na tabela
                jTableTabela.setCellSelectionEnabled(false);
                
                //habilita selecao de uma unica linha
                jTableTabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                
                //finalmente adiciono o modelo ja pronto à minha tabela
                jTableTabela.setModel(modeloTabela);
                
                //mostra tabela
                jTableTabela.setVisible(true);
                
                
            }

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "ERRO:" + ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
        }
    }                                                

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ConsultarClienteView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ConsultarClienteView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ConsultarClienteView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ConsultarClienteView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ConsultarClienteView().setVisible(true);
            }
        });
    }

Adicionei duas labels e caixas de texto pra cod e pra nome, mas não faço ideia do que fazer.

Tenho que criar outro método ou adiciono algo nesse do mesmo botão?

 

Link para o comentário
Compartilhar em outros sites

18 minutos atrás, psykotico disse:

Bem .. isso faz parte da lógica ... é pra fazer outra pesquisa e manter a anterior ??? Então cria outro botão e coloque o código nesse novo botão ...

é pra substituir??? então substitua no botão já existente

 

Eu gostaria de usar o mesmo botão e quando o usuário preenchesse os campos, aparecesse de acordo com cod ou nome e quando ele não digitasse nada e clicasse em consultar, aparecesse todos os clientes.

Link para o comentário
Compartilhar em outros sites

8 minutos atrás, psykotico disse:

usa um if e testa o valor do campo se está preenchido ;)

Mizeravi, acertoou! kkkkk

Vou tentar aqui mano, muuito obrigado mesmo pela ajuda! Tem coisas que não ficam claras durante a aula.
Desculpa o incomodo e obrigado mais uma vez!

Link para o comentário
Compartilhar em outros sites

@psykotico

 

Brother, já consegui fazer isso tudo, mas agora to com outro problema tenso!
Pode me ajudar?

 

Eu preciso usar um jComboBox pra puxar um registro de outra tabela na hora de cadastrar, tentei isso aqui mas não deu certo não.

 

private void jButtonCadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        // TODO add your handling code here:
        try {
            int codigo = 0;

            if (jTextFieldCodigo.getText() != null && !jTextFieldCodigo.getText().isEmpty()) {
                codigo = Integer.parseInt(jTextFieldCodigo.getText());
            }
            ItemVendaService.cadastrarItemVendaService(codigo,

                    jTextFieldQuantidade.getText());
                    


            //mensagem de sucesso
            JOptionPane.showMessageDialog(this, "ItemVenda Cadastrado com Sucesso!", "Sucesso", JOptionPane.INFORMATION_MESSAGE);

            limparCampos();

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, ex.getMessage(), "ERRO", JOptionPane.ERROR_MESSAGE);
        }
    }                                                

    private void jButtonLimparActionPerformed(java.awt.event.ActionEvent evt) {                                              
        limparCampos();
    }                                             

    private void cbVendaActionPerformed(java.awt.event.ActionEvent evt) {                                        
        this.preencherComboBox();
    }                                       

    private void limparCampos() {
        jTextFieldQuantidade.setText("");

    }
    
    public void preencherComboBox()
    {
    
        String sql = "Select *from venda";
                Connection conn = null;
        try
        {
            Statement stmt = conn.createStatement();
            String bd = "Select *from venda";
            ResultSet rs = stmt.executeQuery(bd);
            while(rs.next())
            {
                cbVenda.addItem(rs.getString("COD_CLIENTE"));

            }
                
        } catch(SQLException ex)
        {
            JOptionPane.showMessageDialog(null, ex);
        }
    }

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...