Select com PreparedStatement

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

Olá

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

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

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

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.

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

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

}

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