Boa tarde galéra, estou estudando a apostila fj21 da caelum,e em um exerciçio tenho que criar um método q faz uma pesquisa no banco de dados q me retorna um objeto,de acordo com o id informado como parametro.Só q estou tendo problemas.
public Contato pesquisarContato(int id){
Contato contato = new Contato();
try{
PreparedStatement stmt = this.con.prepareStatement("select * contato where id=?");
stmt.setLong(1,contato.getId());
stmt.execute();
stmt.close();
}catch(SQLException e){
throw new RuntimeException(e);
}
return contato;
}
E que problemas seriam estes?!
onde vc recupera os dados do seu PreparedStatement ??
De uma lida de novo na apostila, especialmente sobre o DAO.
Tinha esquecido do ResultSet
public Contato pesquisarContato(int id){
Contato contato = new Contato();
try{
PreparedStatement stmt = this.con.prepareStatement("select * contato where id=?");
ResultSet rs = stmt.executeQuery();
//stmt.setLong(1,contato.getId());
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
rs.close();
stmt.close();
}catch(SQLException e){
throw new RuntimeException(e);
}
return contato;
}
mas contina dando erro
com.mysql.jdbc.JDBC4PreparedStatement@16897b2: select * contato where id=** NOT SPECIFIED **
Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: No value specified for parameter 1
at br.com.caelum.agenda.dao.ContatoDAO.pesquisarContato(ContatoDAO.java:108)
at br.com.teste.TestaInsere.main(TestaInsere.java:25)
Caused by: java.sql.SQLException: No value specified for parameter 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1072)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:986)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:981)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2546)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2522)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2448)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2202)
at br.com.caelum.agenda.dao.ContatoDAO.pesquisarContato(ContatoDAO.java:99)
... 1 more
No meu modelo Contato o id eh do tipo Long pq no banco dados o tipo do id eh BigInt
mas no método eu estou passando um int cmo argumento será isso o problema.?
[size=24]Caused by: java.sql.SQLException: No value specified for parameter 1 [/size]
eheheh que maldade, mas tá aí o erro![
Você não atributiu nenhum valor ao bind do teu select, que no caso seria preparedStatement.setInt(idContrato) onde idContrato é uma variável do tipo inteira que contém o valor do id do contrato procurado (ufa!)