Fiz uma classe que utiliza um DAO para fazer a pesquisa no bando de dados e exibe as informações na tela:
import br.com.caelum.jdbc.dao.ContatoDao;
import br.com.caelum.jdbc.modelo.Contato;
public class TestaPesquisa {
public static void main(String[] args) {
ContatoDao dao = new ContatoDao();
Contato contato = dao.pesquisar(1);
System.out.println("ID: " + contato.getId());
System.out.println("Nome: " + contato.getNome());
System.out.println("Email: " + contato.getEmail());
System.out.println("Endereço: " + contato.getEndereco());
System.out.println("Data: " + contato.getDataNascimento());
}
}
Aqui o método do meu DAO:
public Contato pesquisar(int id) {
try {
PreparedStatement stmt = this.con
.prepareStatement("select * from contatos where id =" + id);
ResultSet rs = stmt.executeQuery();
Contato contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
return contato;
} catch (SQLException e) {
throw new DAOException();
}
}
E estou com o seguinte erro:
Exception in thread "main" br.com.caelum.jdbc.DAOException
at br.com.caelum.jdbc.dao.ContatoDao.pesquisar(ContatoDao.java:90)
at br.com.caelum.jdbc.teste.TestaPesquisa.main(TestaPesquisa.java:9)
Alguém poderia me dizer o que eu fiz de errado?
Desde já agradeço e peço desculpas se postei no lugar errado ou de forma errada.
Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: Before start of result set
at br.com.caelum.jdbc.dao.ContatoDao.pesquisar(ContatoDao.java:90)
at br.com.caelum.jdbc.teste.TestaPesquisa.main(TestaPesquisa.java:9)
Caused by: java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:855)
at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2952)
at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2947)
at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:3059)
at br.com.caelum.jdbc.dao.ContatoDao.pesquisar(ContatoDao.java:78)
... 1 more
Fiz a correção e não surtiu efeito, continuo com a mesma stacktrace. Eu estou fazendo exercícios de apostila, porém se vc poder mostrar como ficaria usando parâmetro vai ser de ótimo proveito.
Mais um vez, obrigado pela atenção.
String sql = "select * from contatos where id =?";
PreparedStatement stmt = this.con.prepareStatement(sql);
stmt.setId(1,id); // o id é o argumento recebido pelo método
ResultSet rs = stmt.executeQuery();
if(rs.next){
Contato contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
}
return contato;