JDBC: java.sql.SQLException: Invalid column index + procedure do Oracle

3 respostas
R

olpá boa tarde a todos,
bem estou com um problema na seguinte query:

StringBuffer sql = new StringBuffer();

sql.append(" select * from gestor.responsavel where gestor.superfind(nome) like gestor.superfind(’%?%’)  order by nome ");

PreparedStatement pstmt = conn.prepareStatement(sql.toString());

pstmt.setString(1,filtro);//filtro é uma string que recebo no método e superfind é uma procedure criada no oracle

quando executo essa query eu recebo o erro : java.sql.SQLException: Invalid column index

porém quando faço:

StringBuffer sql = new StringBuffer();

sql.append(" select * from gestor.responsavel where gestor.superfind(nome) like gestor.superfind(’%"+filtro+"%’)  order by nome ");

PreparedStatement pstmt = conn.prepareStatement(sql.toString());

dá tudo certo mas dessa forma ou ter problemas qdo pesquisarem Joana D’ Ark ou sei lá posso ter problemas com sql inject oque é muito preocupante. Alguém sabe alguma solução para este problema da primeira abordagem  ou pq ele acontece?ou ainda,existe alguma maneira de utilizar procedures do banco com ejbql ,hql?

Agradeço a atenção.

3 Respostas

R

O prepared statement não suporta o like da forma que vc esta fazendo, vc precisa fazer isso:

sql.append(" select * from gestor.responsavel where gestor.superfind(nome) like gestor.superfind('?') order by nome "); 
pstmt.setString(1,"%"+filtro+"%");
P

Sem ’

R

Valeu galera, muito obrigado pelas dicas ,deu certo aqui !! muito obrigado mesmo!!

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