Isso é, retorna todos Contatos, a Pergunta é como eu faço para fazer uma consulta de um Contato só, por id ou por nome do cliente
Estou tentando fazer assim:
public Contato getContato(Contato consultacontato) throws SQLException
{
java.sql.PreparedStatement stmt = this.connection.prepareStatement("select id from teste1 where id like ? ");
ResultSet rs = (ResultSet) stmt.executeQuery();
Contato c = new Contato();
while (rs.next())
{
c.setNome(rs.getString(consultacontato.getNome())); //c.setNome(stmt.setString(1, “%”+ nomeContato +"%")); //c.setNome(rs.getString(“Danilo”));
}
1) Por favor, formate seu código para facilitar a leitura (use o botão CODE)
2) O parâmetro do método não precisa ser um objeto Contato, pode ser somente um int que representará o id do Contato, ficando assim:
public Contato getContato(int idContato) [...]
3) É bem possível que o seu id no banco seja numérico, então na sua query ao invés de usar LIKE você deve usar =, veja:
[...]prepareStatement("select id from teste1 where id = ?");
4) Você não setou o id na query:
stmt.setInt(1, idContato);
5) Como você quer setar o nome no objeto se na sua query você só está pegando o id? Neste caso faça “select *” ao invés de “select id”, lembrando que o * não deve ser usado, o melhor é você colocar o nome dos campos que quer obter.
Guilherme, se voce puder me explicar algumas coisas mais, agradeço;
No entendi quando voce disse que eu não setei o id da query
public Contato getContato(int contatoid) throws SQLException
{
PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement("select id from contatos where id=?");
ResultSet rs = (ResultSet) stmt.executeQuery();
Contato c = new Contato();
while (rs.next())
{
//stmt.setInt(1,contatoid);
c.setId(rs.getString("id"));
}
rs.close();
stmt.close();
return c;
}
ainda não entendi essa parte,, o erro que esta apresentando é o seguinte
Exception in thread “main” java.sql.SQLException: Statement parameter 1 not set.
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1032)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:677)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1222)
at dao.ContatoDAO.getContato(ContatoDAO.java:95)
at con_bd.Teste.main(Teste.java:91)
estou chamando o metodo da seguinte maneira
[code]
ContatoDAO dao = new ContatoDAO();
Contato contato = new Contato();
System.out.println("Entre com o id do cliente a ser procurado ");
//ler o id do cliente a ser localizado
int id =teclado.nextInt();
contato = dao.getContato(id);
è o que o Giulliano falou mesmo. Repare que a sua query está com um ? no lugar do id. Para selecionar o registro correto no banco de dados, é necessário que você “substitua” na query esta interrogação pelo valor que você quer para o id na query.
Foi isso que eu quis dizer com setar o id na query. Seu código ficaria assim:
public Contato getContato(int contatoid) throws SQLException {
PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement("select id from contatos where id=?");
stmt.setInt(1, contatoId)
ResultSet rs = (ResultSet) stmt.executeQuery();
Contato c = new Contato();
while (rs.next()) {
c.setId(rs.getInt("id"));
}
rs.close();
stmt.close();
return c;
}
se vc esta se referindo sobre o exercício da apostila do caelum…o qual eu estava resolvendo tb…minhas classes ficaram assim…
public class TestaListaDAO {
public static void main(String [] args) throws SQLException, IOException {
ContatoDAO dao = new ContatoDAO();
//Passando o ID a ser consultado, eu ainda não consegui pegar pelo console..vem um némero nada a ver
long id = 2;
List<Contato> contatos = dao.getLista(id);
for(Contato contato:contatos){
System.out.println("Nome : "+ contato.getNome());
System.out.println("email : "+ contato.getEmail());
System.out.println("endereco : "+ contato.getEndereco());
}
}
}
e o método da classe ContatoDAO é o seguinte…
//Metodo de Pesquisa getLista recebendo parametro ID
public List<Contato> getLista(long id) throws SQLException{
System.out.println(id);
PreparedStatement stmt = this.con.prepareStatement("SELECT * FROM CONTATOS WHERE ID = ?");
stmt.setLong(1, id);
ResultSet rs = stmt.executeQuery();
List<Contato> contatos = new ArrayList<Contato>();
while(rs.next()){
//Criando um objeto tipo Contato
Contato contato = new Contato();
contato.setNome(rs.getString("NOME"));
contato.setEmail(rs.getString("EMAIL"));
contato.setEndereco(rs.getString("ENDERECO"));
//Adicionando Valores a lista
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
}
identico ao anterior mas mudando a identidade, ou seja, adicionando um parâmetro a mais…