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.
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