Erro de query no banco de dados

6 respostas
Frank

Pessoal,
Eu estou fazendo uma query diretamente no meu programa e estou usando o PreparedStatement e ResultSet para fazer o que eu preciso (a query no banco de dados e trabalhar com os resultados da mesma, montando um arquivo de saída).
Nesta minha query, na condição WHERE, passo alguns parametros e coloco no resultado dos parametros o ? para passar os valores pelo PreparedStatement. Esses parametros, os dois primeiros são datas e os outros são valores de um JList que eu jogo um array e trabalho com ele.
Se eu não passo nenhum valor no JList, ele faz a query normalmente; se eu passo um valor no JList, ele usa este valor para a query, quando vai executar dá o seguinte erro:

ORA-01006: bind variable does not exist

Segue abaixo o código até a parte da execução da query:
query =
	conn.prepareStatement("SELECT NUMERO, "
	+ "TIPO, PROBLEMA, ABERTO_POR, "
	+ "TO_CHAR(TO_DATE('01/01/1970 00:00:00','DD/MM/YYYY HH24:MI:SS') + ((DATA - 10800) / (60 * 60 * 24)), 'DD/MM/YYYY HH24:MI:SS') as DATA, "
	+ "STATUS "
	+ "FROM SCHEMA.TABELA WHERE DT >= ? AND DT <= ? "
	+ abertoPor.toString());

query.setLong(1, dataInicialSegundos);
query.setLong(2, dataFinalSegundos);
int index = 3;
for (int i = 0; i < array.length; i++) {
	query.setString(index, array[i].toString());
	index++;
}

ResultSet resultado = query.executeQuery();
Segue abaixo a parte que eu monto o abertoPor (String):
String abertoPor = new String();
for (int i = 0; i < array.length; i++) {
	if (i == 0)
		abertoPor = "AND (ABERTO_POR = '?'";
	if (i > 0)
		abertoPor = abertoPor + " OR ABERTO_POR = '?'";				
}
if (array.length != 0)
	abertoPor = abertoPor + ")";

A Data é gravada no banco de dados em segundos.
O banco de dados é o Oracle 8i.

Será que alguém tem alguma solução ? :cry:

Obrigado. :wink:

6 Respostas

urubatan

o esquema é o seguinte, quando o abertopor inclui mais um ? tu tem que fazer o bind desta variavel também :slight_smile:

Frank

Então Rodrigo,
Eu estou fazendo um for para montar o abertoPor e depois de passar a query, passo os parametros das datas e um outro for para ele montar os parametros do abertoPor:

query.setLong(1, dataInicialSegundos); query.setLong(2, dataFinalSegundos); int index = 3; for (int i = 0; i < array.length; i++) { query.setString(index, array[i].toString()); index++; }

Tem que fazer mais alguma coisa ou fazer de outro jeito ? Não é só isto ? :roll:

Obrigado pela ajuda. :wink:

urubatan

depura o codigo para ver se não faltou nenhum, mas é 90% de chance de ser este o problema sim

B

Não consegui ver seu erro não, mas tem uma coisa que acho q pode te dar problema depois:
No abertoPro vc concatena a seguinte String
abertoPor = “AND (ABERTO_POR = ‘?’”;

Vc usa ‘?’ e depois seta uma string nessa interrogação. Quando vc seta uma string, o PreparedStatement já coloca os apostofres (’) sozinho. Não precisa usar ‘?’.

Sei que esse não é o seu problema, mas eu já perdi algum tempo com sql por causa disso.

Frank

urubatan e baiano_mg,
Obrigado pela ajuda de vocês ! Agora vou verificar o meu código com essas dicas … :lol:

Falow. :wink:

Frank

Pessoal,
Utilizei as dicas e consegui resolver o problema ! :smiley:
Era a aspa simples entre o ? (’?’), tirei essas aspas na concatenação do abertoPor e funcionou ! :lol:

Obrigado pela ajuda de vocês,
Falow.

Criado 30 de julho de 2003
Ultima resposta 31 de jul. de 2003
Respostas 6
Participantes 3