[RESOLVIDO]Erro sintaxe SQL/JDBC ajuda!

4 respostas
F
Bom tenho o seguinte preparedStatement com algumas Strings concatenadas, com a intenção de gerar um gráfico com o valor de retorno do banco. Só que pra essa sintaxe so tenho um grafico vazio. Então testei o mesmo código so que mudei a consulta para conteudo estático, ou seja sem nenhuma string concatenada e funcionou perfeitamente. O erro so pode ser nessa parte...
PreparedStatement Consulta = conn.prepareStatement("SELECT valor, HOUR(hora) FROM "+Local+", 
carga WHERE carga.nome="+Carga+" AND carga.autocod="+Local+".carga AND data="+DataInicio+" 
AND hora BETWEEN '00:00:00' AND '23:59:59' AND carga.fase='A' GROUP BY fase, HOUR(hora)");
Ja utilizei o formato abaixo e também deu errado:
"SELECT valor, HOUR(hora) FROM ?, carga WHERE carga.nome= ? AND carga.autocod= ?.carga 
AND data=? AND hora BETWEEN '00:00:00' AND '23:59:59' AND carga.fase='A' GROUP BY fase, 
HOUR(hora)"

Consulta.setString(1, Local);
Consulta.setString(2, Carga);
Consulta.setString(3, Local);
Consulta.setString(4, DataInicio);

As Strings estão certinhas, pois uso elas pra gerar o titulo do gráfico, e esse ta funcionanco certinho! Alguém sabe onde está o erro?
Obrigado!

4 Respostas

thiago.correa

Primeiro, o nome da tabela tem que ser pré-determinado, não pode ser passado como parâmetro. Segundo, para usar PS você ter que usar binds, e não concatenação de strings

PreparedStatement Consulta = conn.prepareStatement("SELECT valor, HOUR(hora) FROM <nome_tabela> carga WHERE carga.nome=? AND carga.autocod=<nome_tabela>.carga AND data=?
 AND hora BETWEEN '00:00:00' AND '23:59:59' AND carga.fase='A' GROUP BY fase, HOUR(hora)");
cassio

Acho que o problema é porque vc esqueceu de colocar um espaço no trecho

data="+DataInicio+" AND

colcoa espaço logo depois do sinal de mais que concatena DataInicio com AND.

Estou chutando, mas…

:slight_smile:

Abraço!

J

Manda a pilha de erros aí pra clarear as idéias…

F
RESOLVIDO o código ficou assim
PreparedStatement Consulta = conn.prepareStatement("SELECT valor, HOUR(hora) FROM "+Local+", 
carga WHERE carga.nome=? AND carga.autocod="+Local+".carga AND data=? AND hora BETWEEN 
'00:00:00' AND '23:59:59' AND carga.fase='A' GROUP BY HOUR(hora)");

Consulta.setString(1, Carga);
Consulta.setString(2, DataInicio);

Parece que em um PreparedStatement somente o nome da tabela pode ser uma String concatenada, o demais somente no esquema de enviar a String.
Obrigado pela ajuda ai!

Criado 27 de outubro de 2006
Ultima resposta 27 de out. de 2006
Respostas 4
Participantes 4