Problemas com listar

11 respostas
D

ola amigos tudo bem estou com um problema ao listar vendas por data uso calendar
no campo onde o usuario faz a busca tem um calendario ele seleciona la a data ai lista todas as vendas daquele dia porem
em na query do relatorio esta dando erro pois fala que esta passando string alguem poderia ajudar?

esta parte aqui abaixo é todo o botao que faz a consulta

consulta.addActionListener (new ActionListener()
		{
			public void actionPerformed(ActionEvent arg0) {
				
				
				List <VendaProduto> lista = null;
				List resultList;
				
				if (f.getText().trim().equalsIgnoreCase(""))
					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", "%" + f.getText().toUpperCase() + "%");
					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.getValor();
				}
				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 String converteData(Calendar data) {
				// TODO Auto-generated method stub
				return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());
			}
		});

erro que ocorre

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Calendar
at org.hibernate.type.CalendarDateType.toString(CalendarDateType.java:49)
at org.hibernate.type.NullableType.nullSafeToString(NullableType.java:93)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:140)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:66)
at ListarVendas$2.actionPerformed(ListarVendas.java:129)
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)

11 Respostas

Rodrigo_Sasaki

2 perguntas

1 - qual o tipo de variável retornada quando você invoca med.getData() ?
2 - Por que você fez um método converteData assim? ele não deveria formatar o Calendar enviado por parâmetro?

D

e date todas as formatacoes de data esta assim…do programa me ajudaram aqui no guj pq estava dando aquele erro la de gregory calendar quando retornava a data pra tabela
ate vc comentou la…agora nao esta buscando por data…ta dando aqueele string cannot and cast calendar algo assim vc nao sabe como que da pra fazer outra conversao ai pra
funcionar? na query ou em outro lugar obrigada?

D

o retorno e um date
nao tem nenhuma conversao que possa ser feito ai pra arruma isso…
uma que nao de erro do gregory calendar e essa busca por data?

porque fazendo esta conversao do convertedata o erro de gregory calendar sumiu
mais agora nao busca por data porque quando comecei a minha aplicacao no comeco data a variavel era string so que ai houve mudanca para
date porque comecei a criar relatorios e agora no banco esta date tipo data calendar o que retorna um date
esta conversao esta retornando um date repetindo mais uma vez o que pode ser feito para essa busca voltar a funcionar neste codigo? deve haver
alguma conversao que pode ser feita d string para calendar ai? note que aonde esta a query esta getText o que e caracteristica d string assim como a parte do equalsSignoRecase que entrara
aberto string “” assim que esta em parenteses acho que o erro esta nesta parte da query nao ah alguma conversao que pode ser feita ali no banco de dados postgresql e o banco que eu uso
obriigada.

D

tipo usando prepared statement ai? mudaria o que? sera q seria mais facil assim? eu uso hibernate?

linngallo

Será que nesta parte:

consulta.setParameter("argumento", "%" + f.getText().toUpperCase() + "%");

Você não deveria converter (re-converter) para data? Já tentou fazer isso?

D

nao tentei como eu posso fazer isso?

linngallo

Isso: f.getText().toUpperCase() deve ser transformado em data. Em qual formato está? dd/MM/yyyy?

Deve haver mais de uma forma de transformar isso em data. Eu mesma não conheço nenhuma muito eficiente. Eu usaria o split para pegar o dia, depois o mês, depois o ano. Criaria uma variável do tipo Calendar, passando esses valores para ela. Depois, converteria de Calendar para Date.

Mas certamente há modos melhores. Me fala qual o formato que está a sua data que eu te mostro como eu faria.

D

formato do postgree e esse yyyy-MM-dd

D
consulta.setParameter(f.getText(), new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime()));

coloquei assim mais esta errado

pq esta dando este erro aqui :(

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [02/07/12]
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:185)
at ListarVendas$2.actionPerformed(ListarVendas.java:128)
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 [02/07/12]
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

D

oieee consegui resolver mesmo sem saber o que faze rsrsrs

adicionando isso

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

e isso aqui

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 :yyyy-MM-dd");
					consulta.setParameter("yyyy-MM-dd", "%" +converteDataa(f.getSelectedDate()) + "%");
					resultList= consulta.getResultList();
				}
D

to com outro problema agora rs eu adicionei isso ai só que ta rs

eu coloco dia 01 que é o dia que u gravei os registros ele pega e traz
esses registros do dia 01 no dia 02 :X ai nao busca pelo dia
passa direto ai rsrs…ele traz todos os registros do banco na data atual mais tem que pega o dia que esta registrado e trazer daquele
dia mais traz todos na data atual rsrs

Criado 1 de julho de 2012
Ultima resposta 2 de jul. de 2012
Respostas 11
Participantes 3