Java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s)

Bom dia,

de acordo com o exemplo do artigo GUJ, ao tentar atribuir parâmetros conforme abaixo:

PreparedStatement ps = qry.loadQuery(con, "selectByCodBanco");
ps.setString(1, "356");
ResultSet rs = ps.executeQuery();
System.out.println(rs.getString("NOME"));

Meu repositório está asim:

selectByCodBanco=SELECT COD_BANCO, NOME FROM TB_BANCO WHERE COD_BANCO = ? ORDER BY COD_BANCO, NOME

Erro: [color=red]java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).[/color]
Alguém pode me ajudar?

Grato.

Post errado!
:slight_smile:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/PreparedStatement.html

Leia aí a docs. =)

Bom dia.

Primeiro, não seria assim?

String selectByCodBanco = "SELECT COD_BANCO, NOME FROM TB_BANCO WHERE COD_BANCO = ? ORDER BY COD_BANCO, NOME"

Segundo: cod_banco é do tipo varchar? Pois está setando um tipo String na sua query, caso contrario, retire as aspas duplas.

Outro detalhe, os nomes das colunas do banco estão corretas? Substitua o:

//busca o valor da segunda coluna, será útil. System.out.println(rs.getString(2));

Outro detalhe, jogue esse mesmo select em seu banco e veja se está correto, caso os passos acima não resolva seu problema poste o código completo ok? Pois a Exception que gerou diz que um ou mais campos encontrados são inválidos.

Abraços!

Fabio, acredito que você esteja equivocado, é 1 mesmo ao invés de 0. Certo?

P.s: estou afirmando que deve iniciar em 1.

Nel, me equivoquei sim.
Abri a doc aqui e vi que tinha postado errado. A contagem dos parâmetros começa com zero é no objeto Query do hibernate. :wink:

Já editei o post anterior.

Ah ok! Nada como uma documentação da api não é? :slight_smile:

Abraços e boa tarde!

não esquece de daar um next() no result set antes de tentar pegar os dados dele

Seguindo as dicas:

  1. rodei a query por fora: ok;
  2. atualizei o repositório de acordo com a explicação (ficou assim):
String selectByCodBanco = "SELECT COD_BANCO, NOME FROM TB_BANCO WHERE COD_BANCO = '?' ORDER BY COD_BANCO, NOME"

pois cod_banco é varchar.

  1. No java: PreparedStatement ps = qry.loadQuery(con, "selectByCodBanco"); ps.setString(1, "356");

Teria esquecido de mais alguma coisa?

Olá.

Seguiu a dica do zoren, ou seja, seu ResultSet precisa dar um next() (pegar o próximo registro).

ResultSet rs = ps.executeQuery(); //se existe um registro, então.... if(rs.next()){ System.out.println(rs.getString(2)); //ou System.out.println(rs.getString("NOME")); }

Abraços! :slight_smile:

O erro ocorre no ‘setString’ e antes do executar a query.

Faça o seguinte: altere a linha do PreparedStatement para:

//creio que a variavél con refere-se a um objeto do tipo java.sql e já esteja preenchida com a conexão certo? PreparedStatement ps = con.preparedStatement(selectByCodBanco);

Abraços.

Pessoal,

muito OBRIGADO pelos posts. Na verdade, o erro estava na montagem do repositório (correto conforme abaixo):

selectByCodBanco = SELECT COD_BANCO, NOME FROM TB_BANCO WHERE COD_BANCO = ? ORDER BY COD_BANCO, NOME
PreparedStatement ps = con.prepareStatement(loader.loadQuery(con, "selectByCodBanco"));
ps.setString(1, "356");

Acho que este tópico vai útil demais da conta para todos.

Valeu D+.