Problema ao fazer busca por data[resolvido]

ola gente tudo bem estou tentando fazer uma busca por data em um calendario eu pego e seleciono la por exemplo o dia de hoje 02/07/2012
e clico no botao ele pega e vai me trazer todos os registros do banco até os registros do dia anterior mais nao é isso que eu quero eu quero que ele pegue e me traga
apenas o registro que foi registrado nesse dia no caso o dia 02/07/2012 o meu codigo esta assim
este é o botao de consulta alguem pode ajudar?
obrigada tem ideia do que seja isso
minha aplicacao esta parada por causa disso é a ultima coisa que falta pra mim terminar se alguém puder me ajudar eu agradeço

[code] consulta.addActionListener (new ActionListener()
{
public void actionPerformed(ActionEvent arg0) {

			List <VendaProduto> lista = null;
			List resultList;
			
			if (converteDataa(f.getSelectedDate()))   
                resultList= em.createQuery("from VendaProduto").getResultList();   
            else // Senão ele digitou alguma coisa na procura   
            {   
                Query consulta =   
                    em.createQuery("SELECT i FROM VendaProduto i WHERE UPPER(i.data) LIKE :argumento");   
                consulta.setParameter("argumento", "%" +converteDataa(f.getSelectedDate()) + "%");   
                resultList= consulta.getResultList();   
            }  

			
			lista = resultList;
			
			StringBuilder sb = new StringBuilder();

			if (lista.isEmpty())
			{
				sb.append("Não há vendas cadastradas!");
			}
			else
			{
			double soma = 0;
			for (VendaProduto med : lista) {
				sb.append("Código: " + med.getCodigo() + "\n");
				sb.append("Data: " + converteData(med.getData()) + "\n");
				sb.append("Nome do Vendedor: " + med.getNomevendedor() +"\n");
				sb.append("Descrição:  " + med.getDescricao()+ "\n");
				sb.append("Quantidade:" + med.getQtde()+ "\n");
				sb.append("Valor:  " + med.getValor()+ "\n");
				sb.append("Total:  " + med.getTotal()+ "\n");
				
				
			    // Adiciona uma linha)
			    modelo.addRow(new Object[]{med.getCodigo(),converteData(med.getData()), med.getNomevendedor(), med.getDescricao(),med.getQtde(),med.getValor(),med.getTotal()});

			    soma += med.getTotal();
			}
			sb.append("Total de Vendas Efetuadas = " + lista.size()+"\n\n");
			//sb.append("Média dos Anos dos Carros   = " + soma/lista.size());
			sb.append("Total do Valor de Vendas = " +soma+lista.size()+"\n\n");
			totalmedidas.setText("Total de Vendas Efetuadas = " + lista.size());
			totalvalor.setText("Total do valor de vendas = " +soma);
			//mediaano.setText("Média dos Clientes Cadastrados   = " + soma/lista.size());
			
			}
			
			//area.setText(sb.toString());

		}
		private boolean converteDataa(Calendar data) {
			// TODO Auto-generated method stub
			return true;
		}
		
		private String converteData(Calendar data) {
			// TODO Auto-generated method stub
			return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());
		}
	});[/code]

a parte que esta retornando errado é essa

[code]consulta.addActionListener (new ActionListener()
{
public void actionPerformed(ActionEvent arg0) {

        List <VendaProduto> lista = null;   
        List resultList;   
           
        if (converteDataa(f.getSelectedDate()))     
               resultList= em.createQuery("from VendaProduto").getResultList();     
           else // Senão ele digitou alguma coisa na procura     
           {     
               Query consulta =     
                   em.createQuery("SELECT i FROM VendaProduto i WHERE UPPER(i.data) LIKE :argumento");     
               consulta.setParameter("argumento", "%" +converteDataa(f.getSelectedDate()) + "%");     
               resultList= consulta.getResultList();     
           }    [/code] 

mais as conversoes tem algo errado nessas partes aqui do código por isso esta dando este erro que expliquei acima.

[code]private boolean converteDataa(Calendar data) {
// TODO Auto-generated method stub
return true;
}

		private String converteData(Calendar data) {
			// TODO Auto-generated method stub
			return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());
		}[/code]

Falaí, Dani…

Tô vendo pelo menos dois motivos pra seu código não funcionar:

Nesse setParameter você tá passando um valor boolean … se ligou nisso ? Você tem dois métodos com nomes parecidos - converteDataa() e converteData(). Não é isso que tá te confundindo ?

Outra coisa… o operador LIKE é usado para comparações com campos do tipo texto… Não se dá LIKE em campo date. E o UPPER… essa função é pra converter o texto de minúsculas para maiúsculas. Se tentar rodar isso direto no banco é certeza que dá erro… A menos que você esteja fazendo um chuncho daqueles grandes, menina!!

Se você quer localizar um registro procurando pela data específica é isso:

if (converteDataa(f.getSelectedDate())) resultList= em.createQuery("from VendaProduto").getResultList(); else // Senão ele digitou alguma coisa na procura { Query consulta = em.createQuery("SELECT i FROM VendaProduto i WHERE i.data = :argumento"); consulta.setParameter("argumento", "%" +converteData(f.getSelectedDate()) + "%"); resultList= consulta.getResultList(); }

entao eu mudei aqui mais ainda ta acontecendo o erro acima

quanto a conversao que eu posso muda pra funciona ?
assim eu fiz duas conversoes porque antes tava dando erro d string mais deve ter algo que possa ser feito ai pra que de certo usando essas conversoes tem ideia?

obrigada

conversoes

[code]private boolean converteDataa(Calendar data) {
// TODO Auto-generated method stub
return true;
}

		private String converteData(Calendar data) {
			// TODO Auto-generated method stub
			return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());
		}[/code]

Não vale a pena tentar o que resolveu o problema do seu outro post, aquele dos relatórios ? Experimenta… e se der erro posta exatamente o que aparece pra você

% se utiliza para Like, não precisa dele aqui.

//   consulta.setParameter("argumento", "%" +converteData(f.getSelectedDate()) + "%"); 
   consulta.setParameter("argumento", converteData(f.getSelectedDate())); 

Aqui você está recebendo uma data, mas não está utilizando. Está usando uma nova data.

 private String converteData(Calendar data) {  
                // TODO Auto-generated method stub  
                return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());  //??
            }  

E acredito que se na tabela o campo está como date, não precisa passar para String. Não me recordo de um dia ter que converter, mas se tiver, acho que é só fazer essas mudanças que eu citei anteriomente.

tipo deeve ter algo que possa ser mudado nas conversoes mesmo e la encima pra funcionar

beleza vou testa calma ai xD

agora to usando o convertedata

[code]consulta.addActionListener (new ActionListener()
{
public void actionPerformed(ActionEvent arg0) {

			List <VendaProduto> lista = null;
			List resultList;
			
			erro nesta linha//if (converteData(f.getSelectedDate()))
				resultList= em.createQuery("from VendaProduto").getResultList();
			else 
			{
				Query consulta =         
					em.createQuery("SELECT i FROM VendaProduto i WHERE i.data = :argumento"); // Adicionei aspas simples aqui   
					consulta.setParameter("argumento", converteData(f.getSelectedDate()));         
					resultList= consulta.getResultList();  
			} [/code]

converte data

private String converteData(Calendar data) { // TODO Auto-generated method stub return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime()); }

erro

Exception in thread “AWT-EventQueue-0” java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from String to boolean

at ListarVendas.<init>(ListarVendas.java:122)
at EfetuarVenda$5.actionPerformed(EfetuarVenda.java:274)
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)

este é o codigo que estava inicialmente e estava dando erro de string

if (f.getText().trim().equalsIgnoreCase("")) resultList= em.createQuery("from VendaProduto").getResultList(); else { Query consulta = em.createQuery("SELECT i FROM VendaProduto i WHERE i.data = :argumento"); // Adicionei aspas simples aqui consulta.setParameter("argumento",f.getText().toUpperCase()); resultList= consulta.getResultList(); }

esse aqui o erro que estava dando

Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Calendar

nao to conseguindo :frowning:

tentei passar o calendar data como parametro mais ta dando erro tambem ademilton se puder me ajudar?

tentei passa assim mais deu erro

tanto comm o codigo inicial ou com o q tava a resolver esse problema ficarei grata

erick se puder ajudar tb

to apanhando nessa conversao ja tentei d todo jeito mais nao vai :frowning:

private String converteData(Calendar data) {  
                // TODO Auto-generated method stub  
                return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());  
            }  

esse método está errado. o tipo de retorno é String, porém não é o que está retornando.

String data?

seria assim?

private String converteData(String data) { // TODO Auto-generated method stub return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime()); }

private String converteData(Calendar data) {  
                // TODO Auto-generated method stub  
                return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());  
            }  

esse método está errado. o tipo de retorno é String, porém não é o que está retornando.[/quote]
Só uma dúvida, o que ele está retornando, se não é uma String???
O método format, da classe SimpleDateFormat retorna uma String sim e este método converteData (salvo por não conter orações nem um pastor) faz a conversão corretamente.
Agora, o problema é que todo o processo está errado.
Vamos analisar o seguinte, usando hibernate, o campo “data” que deseja-se usar como parâmetro de pesquisa, no banco de dados, deve estar como Date. Logo, essa conversão para String não faz nenhum sentido.
Segundo, o método recebe um Calendar, mas, não o usa para o processo de conversão.
Terceiro, como o método retorna uma String com a data atual, obviamente o processo de pesquisa irá contemplar mais prazo que o definido pelo usuário.

Se vai trabalhar com Date no banco, não precisa de um método de conversão.
Antes de qualquer coisa, poste a entidade que é usada como base para a consulta, assim podemos saber como o atributo que representa esta data está em VendaProduto.

entao eduardo

acho que vou fazer o seguinte retirar esta conversao
porem acontecera um erro no hora de listar
no local da data acontecera o erro de gregory calendar ai nao sei o que pode ser feito mais e date
no banco a entidade variavel ou seja os getters e setters esta assim para a variavel data
@Temporal(Temporal.Type.Date) algo assim
private calendar data;

public void setData(Calendar data)
this.setData = data algo assim, nao exatamente assim…os getters e setters foram gerados automatico pelo programa apartir da variavel calendar data.

irei fazer um teste vou mudar o codigo ai posto aqui novamente…irei tirar a conversao e ver se vai funciona
essa busca por data mais acho que e provavel que nao funciona pois antes a variavel era string e acabei mudando
pra date devido a problema na criacao de relatorios ai agora esta como date…
pois um datechoosercombo na hora que cria acaba criando uma date no banco e uma variavel calendar na entidade o que realmente retorna um date é isso que ocorreu.

vou postar a classe entidade pra vc e que estou no servico ai posto