Erro Entity[RESOLVIDO]

9 respostas
O

nao esta fazendo select

erro:
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Syntax error parsing the query [select c from Contato c where c.dat between 02/09/2012 and 02/09/2012], line 1, column 44: unexpected token [02].

código:

Query q; q = motor.createQuery("select c from Contato c where c.dat between " + data_search_ini + " and " + data_search_ini2);

9 Respostas

Hebert_Coelho

Aqui mostra como realizar corretamente consultas e passando parâmetros.

JPA Consultas e Dicas

A

Dê uma olhada no link que o jake falou lá no blog dele, é excelente, mas indo direto ao ponto, sempre que você especificar, em uma query, que você quer valores entre (BETWEEN) um determinado range, você terá que passar estes valores na linguagem do sql e na formatação também.

Seu código:

q = motor.createQuery("select c from Contato c where c.dat between " + data_search_ini + " and " + data_search_ini2);

Rende isto:

select c from Contato c where c.dat between 02/09/2012 and 02/09/2012

Enquanto o que deveria ser feito seria isto:

select c from Contato c where c.dat between '2012-09-02' and '2012-09-02'

entre ’ simples e no formato yyyy-MM-dd.
Contornando a situação com o teu próprio código:

q = motor.createQuery("select c from Contato c where c.dat between str_to_date('" + data_search_ini + "','%d/%m/%Y') and str_to_date('" + data_search_ini2 "','%d/%m/%Y'));

o que vai acontecer, o valor que é passado no nosso padrão, dd/MM/yyyy que está indo como uma String, será transformado em uma data válida, assim realizará a sua query.

O

esta complicado andré ainda continua dando mesmo erro, utlizo hsqldb

A

Cara, você deve dar uma olhada na documentação do HSQLDB e ver se ele oferece o suporte ao comando between (http://hsqldb.org/doc/2.0/guide/guide.pdf) e adaptar a sua query para ele, caso não tenha o comando, você deve colocar “no dedo”, por exemplo, SELECT * FROM tabela WHERE data1 >= ‘2012-09-02’ or data1 <= ‘2012-09-02’, no caso de or, and, etc, você deve criar a sua condição

drsmachado

O problema não é o campo between, é o sujeito ter preguiça de usar variáveis do tipo Date/Calendar e tentar fazer um between com String, além de não criar a query corretamente.

Um pouco mais de estudo seria bem legal antes de sair fazendo atrocidades como esta por aí.

O

se voce não sabe, estou fazendo uma requisicao do servlet que esta recebendo de um campo html

Rodrigo_Sasaki

Amigo, cuidado antes de falar coisas assim, o que você disse aí não invalida de maneira nenhuma o comentário do drsmachado

O

sim, mas a pessoa tem que ter educação.

Hebert_Coelho

os_x:
se voce não sabe, estou fazendo uma requisicao do servlet que esta recebendo de um campo html
Você leu o post que eu passei lá em cima? Você podeira estar recebendo os dados com um long 0912380128308120 que daria para se fazer a consulta como o machado disse.

Criado 2 de setembro de 2012
Ultima resposta 3 de set. de 2012
Respostas 9
Participantes 5