Select com PreparedStatement

3 respostas
caiomacedor
Bom dia pessoal, tenho que recorrer a ajuda da galera novamente. Estou iniciando em java, e estou apanhando desse programa que estou criando. Vou colocar parte do código aqui, e quem poder me dar uma foça agradeço se coração. Tenho esse Metodo: public Contato buscaContato(Contato contato) throws SQLException {

PreparedStatement stmt = this.connection.prepareStatement(“SELECT * FROM contato WHERE Celular like ‘?%’”);

stmt.setString(1, contato.getCelular());

ResultSet rs = stmt.executeQuery();

while(rs.next()) {

contato.setCelular(rs.getString(“Celular”));

System.out.println(rs.getString(“Celular”));

}

rs.close();

stmt.close();

connection.close();

return contato;

}
Classe que chama o método acima:

public class TesteBuscaContato {

public static void main(String[] args) {

try {

Contato contato = new Contato();

contato.setCelular(9);

ContatoDAO dao = new ContatoDAO();
dao.buscaContato(contato);

}catch(SQLException sqle) {

sqle.printStackTrace();

}

}

}

Acontence que esta dando esse erro: Parameter index out of range (1 > number of parameters, which is 0).
Alguem pode me dar uma força aí?

3 Respostas

M

Bom dia Caio.

Acredito que o erro seja na linha abaixo:

contato.setCelular(rs.getString("Celular")); System.out.println(rs.getString("Celular"));

Motivo: o método getString() da classe ResultSet retorna um String o qual deve ser referenciado através de um índice (int) ou o nome da coluna (String). Você está sugerindo que o retorno deve ser através do nome de uma coluna mas não está definindo a mesma no seu select.
Ou seja, tente alterar a instrução de seleção para algo como “Select nome_coluna as Celular from contato where celular like ‘?%’”.
O nome da coluna ou alias deve ser igual ao parâmetro do método getString(), ok?

caiomacedor

Não é isso não. Continua dando o mesmo erro.
Com esse SQL ele funciona direitinho.
“SELECT * FROM contato WHERE Celular like ?”.
Mas o problema que eu quero que faça uma busca de todos os registros que inicio com o numero 9

S

cara olha, não sei se eu entendi seu codigo direito,

mais tentaa assim

stmt.setString(1, contato.getCelular()+"%");

e no select retire as aspas e deixe apenas o ponto de interrogação.

Cara isto acontece pq quando vc coloca o ? dentro de aspas o componente não entende que voce atribuiu parametros no codigo sql.

tenta ai e da um toque

Criado 20 de agosto de 2007
Ultima resposta 20 de ago. de 2007
Respostas 3
Participantes 3