Duvida sobre consulta usando PreparedStatement

3 respostas
W
Ola amigos do GUJ estou com uma dúvida em uma consulta sql, estou usando o myql, minha   consulta encontra-se no método do meu DaoCidade, esta dando uma excessao que afirma para conferir a sintaxe sql, mas quando eu faço SELECT * FROM cidade WHERE nome LIKE ?%’”, para de da essa excessão, porém lança uma  excessão afirmando Parameter index out of range (1 > number of parameters, which is 0). Alguem poderia me dar uma dica sobre isso, deve ser algum pequeno erro,  preciso de uma pequena ajuda, desde  obrigado.

public List pesquisar(String rgx) throws SQLException{

String select=SELECT * FROM cidade

+ WHERE nome LIKE ?+%;

ResultSet rs=executaConsulta(select,rgx);

List cidades= new ArrayList();

while (rs.next()){

Cidade cidade=new Cidade();

cidade.setCodCidade(rs.getInt(codigo));

cidade.setNome(rs.getString(nome));

cidade.setUf(rs.getString(uf));

cidades.add(cidade);

}
return cidades;

}

Meu metodo executaConsulta  que está no meu DaoGenerico é o seguinte:

public ResultSet executaConsulta(String selectSql,Object params) throws SQLException{

PreparedStatement ps=getConexao().prepareStatement(selectSql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet rs;

for( int i=0;i<params.length;i++){

ps.setObject(i+1, params[i]);

}

rs= ps.executeQuery();

ps.close();
return rs;

}

3 Respostas

carlos.e.a

Amigo da proxima vez coloca na tag code pq assim fica muito dificil de quem vai ajudar ler seu codigo.

Eu vou dar só a dica pra voce resolver esse problema: Ao chamar o setObject() o metodo vai fazer instanceof e verificar o tipo passado. Se for String ele vai colocar as aspas simples no seu parametro. Por isso nenhuma das suas duas consultas esta com sintaxe correta.

A primeira o resultado seria:

SELECT * FROM cidade WHERE nome LIKE (aspa simples)?(aspa simples)%;

o segundo seria:

SELECT * FROM cidade WHERE nome LIKE (aspa simples)(aspa simples)?(aspa simples)%(aspa simples)

Tem varias formas de resolver isso. Uma delas seria passar seu curinga(%) apenas na passagem do parametro.

PuRgAuM

Posta o erro mostrado…

W

Obrigado, eu tinha pensando que poderia ser mais ou menos isso, eu consegui resolver passando % na chamada do método. Falta de atenção minha. :slight_smile: . Era o que o Carlos tinha afirmado.

Criado 23 de janeiro de 2012
Ultima resposta 23 de jan. de 2012
Respostas 3
Participantes 3