Select com PreparedStatement

6 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 ?%");
	ResultSet rs = stmt.executeQuery();

	rs.next();
	contato.setCelular(rs.getString("Celular"));
	
	rs.close();
	stmt.close();
	connection.close();
	
	return contato;
}

E essa Classe que chama o método acima:

public class TesteBuscaContato {

public static void main(String[] args) {
	
	try {
		Contato contato = new Contato();
		contato.setCelular("9580-9646");
		
		ContatoDAO dao = new ContatoDAO();
		dao.buscaContato(contato);
		
		System.out.println(contato.getCelular());
		
	}catch(SQLException sqle) {
		sqle.printStackTrace();
	}
}

}

Acontence que esta dando esse erro: java.sql.SQLException: No value specified for parameter 1

E eu não estou conseguindo descobrir onde esta o erro. Se não entenderão o meu objetivo pode perguntar que tento explicar melhor…
Muito obrigado

6 Respostas

furutani

Olá

Você não informou o valor do ? na query

("SELECT * FROM contato WHERE Celular LIKE ?%");
leandroadinolfi

Faltou a seguinte linha de código:

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

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

ResultSet rs = stmt.executeQuery();

Igor_Novaes

Olá todos!

Quero apenas reforçar uma coisinha! Ou se eu estiver enganado me corrijam!!!

Esta interrogação não seria entre parenteses?

Exemplo --> (?)

Creio que seja desta forma…
Abraço a todos.

rodrigo_corinthians

Igor, não precisa dos parênteses entre a interrogação.

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/PreparedStatement.html

caiomacedor

Pô pessoal fiz as seguintes alteração mas ainda dá esse erro: Parameter index out of range (1 > number of parameters, which is 0).

Olhem o novo codigo:

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;
}
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();
	}
}

}

leandroadinolfi

Cara! descobri o seu problema, ele ocorre devido a utilização do caracter % junto a ?, neste caso quando você executa o comando stmt.setString ele adiciona a variavel e fica algo deste tipo:

SELECT * FROM contato WHERE Celular like ‘9’%;

O que realmente não ira funcionar então você deve adicionar o caracter % no momento que da o set.da seguinte forma:

//-------------------------------------------------------------------------------//
PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM contato WHERE Celular like ? ");

stmt.setString(1, contato.getCelular() + “%” );
//-------------------------------------------------------------------------------//

Leandro Adinolfi

Criado 18 de agosto de 2007
Ultima resposta 28 de ago. de 2007
Respostas 6
Participantes 5