Listar clientes por letra.[resolvido]

14 respostas
D

ola gente meu codigo do listar clientes e este abaixo como voces veem ele busca por no completo nesta parte aqui

Query consulta =     
                        em.createQuery("SELECT i FROM Cliente i WHERE UPPER(i.NomeCompleto) LIKE :argumento");          
                    consulta.setParameter("argumento", "%" + procura.getText().toUpperCase() + "%");     
                    resultList= consulta.getResultList();

como posso fazer pra q ele busque por letra digitada pois ele so esta buscando caso eu digite o nome completo da pessoa...tipo se eu digitar danielle ele nao acha
mais se eu digitar danielle goncalvez de lima ele vai me achar porem nao era isso que eu queria eu queria que quando ele digitasse apenas danielle ele me achasse registrada
alguem pode me ajudar?obrigada.

o codigo completo daa janela listar clientes completo e este abaixo meu sql que esta no codigo tambem e este acima obrigada.

import java.awt.Color;     
import java.awt.Container;     
import java.awt.Dimension;     
import java.awt.FlowLayout;     
import java.awt.event.ActionEvent;     
import java.awt.event.ActionListener;     
import java.util.List;     
     
import javax.persistence.EntityManager;     
import javax.persistence.EntityManagerFactory;     
import javax.persistence.Persistence;     
import javax.persistence.Query;     
import javax.swing.*;     
import javax.swing.table.DefaultTableModel;     
import Modelo.Cliente;     
     
public  class ListarCliente extends JFrame {     
     
    private JTextArea area;     
    private JScrollPane j1;     
    private JButton fechar;     
         
    // Objetos utilizados para     
    // procura pela descrição informada     
    private JLabel     labelprocura;     
    private JTextField procura;     
    private JButton    consulta;     
             
    private static EntityManagerFactory emf;     
    private static EntityManager em;     
     
    DefaultTableModel modelo;     
         
    private JTextField totalclientes;     
    //private JTextField mediaano;     
         
     
    public ListarCliente(EntityManagerFactory f1, EntityManager e1)     
    {     
        super("Listar clientes Cadastrados");     
        Container c = getContentPane();     
        getContentPane().setLayout(null);     
             
        emf = f1;     
        em = e1;     
             
             
        JButton fechar = new JButton("Fechar");     
             
        labelprocura = new JLabel("Busca por Nome:");     
        procura = new JTextField();     
             
        totalclientes = new JTextField();     
                     
        consulta = new JButton("Executar");     
             
        labelprocura.setBounds(20, 10, 100, 20);     
        procura.setBounds(130, 11, 150, 20);     
        consulta.setBounds(290, 10, 100, 20);     
             
        modelo = new     
        DefaultTableModel();     
             
        // constrói a tabela     
        JTable tabela = new JTable(modelo);     
             
        // Cria duas colunas     
        modelo.addColumn("Código");     
        modelo.addColumn("Data");     
        modelo.addColumn("Nome Completo");     
        modelo.addColumn("Endereço");     
        modelo.addColumn("Cpf");     
        modelo.addColumn("Bairro");     
        modelo.addColumn("Cidade");     
        modelo.addColumn("uf");     
        modelo.addColumn("Cep");     
        modelo.addColumn("Telefone");     
        modelo.addColumn("Complemento");     
        modelo.addColumn("Email");     
        modelo.addColumn("Rg");     
        modelo.addColumn("Data de Nascimento");     
             
        tabela.getColumnModel().getColumn(0).setPreferredWidth(5);       
        tabela.getColumnModel().getColumn(1).setPreferredWidth(30);       
        tabela.getColumnModel().getColumn(2).setPreferredWidth(100);       
        tabela.getColumnModel().getColumn(3).setPreferredWidth(100);       
        tabela.getColumnModel().getColumn(4).setPreferredWidth(100);       
        tabela.getColumnModel().getColumn(5).setPreferredWidth(50);       
        tabela.getColumnModel().getColumn(6).setPreferredWidth(50);     
        tabela.getColumnModel().getColumn(7).setPreferredWidth(5);       
        tabela.getColumnModel().getColumn(8).setPreferredWidth(50);       
        tabela.getColumnModel().getColumn(9).setPreferredWidth(30);       
        tabela.getColumnModel().getColumn(10).setPreferredWidth(80);     
        tabela.getColumnModel().getColumn(11).setPreferredWidth(80);       
        tabela.getColumnModel().getColumn(12).setPreferredWidth(30);       
        tabela.getColumnModel().getColumn(13).setPreferredWidth(30);       
     
           
        fechar.setBounds(20, 384, 100, 23);     
             
        fechar.addActionListener (new ActionListener()     
        {     
            public void actionPerformed(ActionEvent arg0) {     
                // TODO Auto-generated method stub     
                dispose();     
     
            }     
                 
        });     
             
        consulta.addActionListener (new ActionListener()     
        {     
            public void actionPerformed(ActionEvent arg0) {     
                     
                     
                List <Cliente> lista = null;     
                List resultList;     
                     
                if (procura.getText().trim().equalsIgnoreCase(""))     
                    resultList= em.createQuery("from Cliente").getResultList();     
                else     
                {     
                    Query consulta =     
                        em.createQuery("SELECT i FROM Cliente i WHERE UPPER(i.NomeCompleto) LIKE :argumento");          
                    consulta.setParameter("argumento", "%" + procura.getText().toUpperCase() + "%");     
                    resultList= consulta.getResultList();     
                }     
                     
                lista = resultList;     
                     
                StringBuilder sb = new StringBuilder();     
     
                if (lista.isEmpty())     
                {     
                    sb.append("Não há clientes cadastrados!");     
                }     
                else     
                {     
                double soma = 0;     
                for (Cliente cliente : lista) {     
                    sb.append("Codigo: " + cliente.getCodcliente() + "\n");     
                    sb.append("Data: " + cliente.getData() +"\n");     
                    sb.append("Nome Completo:  " + cliente.getNomeCompleto()+ "\n");     
                    sb.append("Endereço:  " + cliente.getEndereco()+ "\n");     
                    sb.append("Cpf:  " + cliente.getCpf()+ "\n");     
                    sb.append("Bairro:  " + cliente.getBairro()+ "\n");     
                    sb.append("Cidade:  " + cliente.getCidade()+ "\n");     
                    sb.append("Uf:  " + cliente.getUf()+ "\n");     
                    sb.append("Cep:  " + cliente.getCep()+ "\n");     
                    sb.append("Telefone:  " + cliente.getTelefone()+ "\n");     
                    sb.append("Complemento:  " + cliente.getComplemento()+ "\n");     
                    sb.append("Email:  " + cliente.getEmail()+ "\n");     
                    sb.append("Rg:  " + cliente.getRg()+ "\n");     
                    sb.append("Data de Nascimento:  " + cliente.getDatadenascimento()+ "\n\n");     
                         
                    // Adiciona uma linha     
                    modelo.addRow(new Object[]{cliente.getCodcliente(), cliente.getData(), cliente.getNomeCompleto(),cliente.getEndereco(),cliente.getCpf(),cliente.getBairro(),cliente.getCidade(),cliente.getUf(),cliente.getCep(),cliente.getTelefone(),cliente.getComplemento(),cliente.getEmail(),cliente.getRg(),cliente.getDatadenascimento()});     
     
                    soma = soma + cliente.getCodcliente();     
                         
                }     
                     
                sb.append("Total de Clientes Cadastrados = " + lista.size()+"\n\n");     
                //sb.append("Média dos Anos dos Carros   = " + soma/lista.size());     
                totalclientes.setText("Total de Clientes Cadastrados = " + lista.size());     
                //mediaano.setText("Média dos Clientes Cadastrados   = " + soma/lista.size());     
                     
                }     
                     
                //area.setText(sb.toString());     
     
            }     
        });     
     
       tabela.setPreferredScrollableViewportSize(new     
              Dimension(1000, 1000));     
     
        JScrollPane scrollPane = new JScrollPane(tabela);     
        scrollPane.setBounds(20, 42, 1350, 300);     
             
        totalclientes.setBounds(20, 353, 1350, 20);     
        //mediaano.setBounds(50, 400, 1300, 20);     
     
        c.add(scrollPane);     
        c.add(totalclientes);     
        //c.add(mediaano);     
     
                 
        c.add(labelprocura);     
        c.add(procura);     
        c.add(consulta);     
     
        //c.add(area);     
        //c.add(j1);     
             
        c.add(fechar);     
             
        JButton btnLimpar = new JButton("Limpar");     
        btnLimpar.addActionListener(new ActionListener() {     
            public void actionPerformed(ActionEvent arg0) {     
                int x = modelo.getRowCount();       
                for(int a = 0; a < x; a++)       
                {       
                modelo.removeRow(0);       
                }       
            }     
        });     
        btnLimpar.setBounds(130, 384, 100, 23);     
        getContentPane().add(btnLimpar);     
             
        setSize(1400,451);     
        setVisible(true);     
        setLocationRelativeTo(null);     
    }     
     
    public static void main(String[] args) {     
             
             
     
    }     
}

14 Respostas

Hebert_Coelho

O valor está chegando correto na query?

D

sim esse codigo nao tem erros…ele busca o nome completo da pessoa eu quero que busca pelo menos o primeiro nome exemplo

tem varias danielle por exemplo

danielle rocha da silva
danielle maidana de souza

ai eu digito la no campo danielle

mostra as duas por exemplo eu queria que fizesse isso assim como em outros nomes.

A

Não mexo com essa api javax.persistence, mas dando uma olhada na documentação

http://docs.oracle.com/javaee/6/tutorial/doc/bnbrg.html

a impressão que tenho é que esses % que você tá concatenando na String que tá passando no setParameter são desnecessários. Onde está assim

ficaria só assim

D

vou testa la em casa esse codigo vou ver se vai busca qualquer coisa aviso aqui to no servico mais chegando em casa ja testo xD mto obrigada xD e se der alguma coisa posto aqui \o

D

sera q eu so fizer isso ai ele vai filtra do jeito que quero sera? igual informei?

Rodrigo_Sasaki

Uma coisa que você deve fazer, é analisar a query gerada pela implementação do JPA, não sei qual você usa.
mas analisando a query você pode ter uma ideia melhor do que aconteceu de errado, e partir daí.

Se quiser poste aqui a query quando puder.

D

realmente a cocatenacao de strings nao era necessario porem ainda continuo buscando o nome todo da pessoa

D

e digao to ligada q tem algo errado na minha query porem quero ajuda de como posso fazer pra filtra por letra como citei de exemplo

tipo tem ari maia de souza
ari toledo santana

quero q eu digite ari e apareça os dois assim…é um jeito d filtra no comercio acho q ninguem sabera um nome de cliente total completo pra buscar geralmente busca pelo primeiro nome ou pela letra é isso que quero fazer por isso pedi ajuda aqui neste topico pq me ajudando tambem ajuda a outras pessoas que tambem querem fazer isso obrigada quanto mais conhecimento passar para as pessoas desse forum melhor afinal todo mundo esta aqui para ajudar e aprender tambem obrigada.

Rodrigo_Sasaki

Então, o ideal é ver a query gerada, e ver aonde está o erro. Porque eu ja vi diversas soluções pra esse problema, e no seu caso, aparentemente ja estava correto. Uma coisa que vi tentarem também éQuery consulta = em.createQuery("SELECT i FROM Cliente i WHERE UPPER(i.NomeCompleto) LIKE ':argumento'"); // Adicionei aspas simples aqui consulta.setParameter("argumento", "%" + procura.getText().toUpperCase() + "%"); resultList= consulta.getResultList();Mas não afirmo que isso funcionará com certeza, pois como disse, é uma das soluções encontradas pra esse problema.

Hebert_Coelho

Olha só, se não me engano o like sem % funciona igual ao “=”.

O % serve para você procurar um algo que se encaixe no padrão.

Se eu fosse você faria como o digaoneves disse. Olha a query final que está sendo executada, coloque para imprimir no console.

D

Hibernate: select cliente0_.codcliente as codcliente0_, cliente0_.Bairro as Bairro0_, cliente0_.Cidade as Cidade0_, cliente0_.NomeCompleto as NomeComp4_0_, cliente0_.cep as cep0_, cliente0_.complemento as compleme6_0_, cliente0_.cpf as cpf0_, cliente0_.data as data0_, cliente0_.datadenascimento as datadena9_0_, cliente0_.email as email0_, cliente0_.endereco as endereco0_, cliente0_.rg as rg0_, cliente0_.telefone as telefone0_, cliente0_.uf as uf0_ from Cliente cliente0_ where upper(cliente0_.NomeCompleto) like ?

TIPO TENHO UM REGISTRO COM ARI E OUTRO COM ARNALDO COLOQUEI ARI ASSIM APARECEU COLOQUEI A VAZIO SO APARECEU ISSO NAO ENTENDO PQ NAO ESTA INDO DEVERIA APARECER O ARI E O ARNALDO QUANDO EU DIGITASSE SO A.

D

se eu coloca só a usando a query do digao na busca olha o erro que acontece

Exception in thread AWT-EventQueue-0 java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [argumento]

at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:185)

at ListarCliente$2.actionPerformed(ListarCliente.java:126)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$000(Unknown Source)

at java.awt.EventQueue$1.run(Unknown Source)

at java.awt.EventQueue$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$2.run(Unknown Source)

at java.awt.EventQueue$2.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Caused by: org.hibernate.QueryParameterException: could not locate named parameter [argumento]

at org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:75)

at org.hibernate.engine.query.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:81)

at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:413)

at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:383)

at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:180)

 37 more
Rodrigo_Sasaki

Conseguiu resolver? O que você fez?

Hebert_Coelho

digaoneves:
Conseguiu resolver? O que você fez?
Te pergunto o mesmo. [=

Criado 18 de junho de 2012
Ultima resposta 18 de jun. de 2012
Respostas 14
Participantes 4