Pesquisa em um Banco de dados

Boa noite

Tenho esse metodo em uma classe DAO

[code]public Contato pesquisar(Contato cont){
try {
Contato contato = new Contato();
PreparedStatement stmt = this.connection.prepareStatement(“select * from contatos where id=?”);
stmt.setLong(1, cont.getId());
ResultSet rs = stmt.executeQuery();

		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);
		
		rs.close();
		stmt.close();
		return contato;
	} catch (SQLException e) {
		throw new RuntimeException(e);
		//e.printStackTrace();
		//return new Contato();
	}
}[/code]

e estou usando esta classe para realizar o teste

[code]public class TestePesquisa {
public static void main(String[] args) throws ClassNotFoundException {
ContatoDAO dao = new ContatoDAO();
Contato cont = new Contato();
cont.setId(1L);
Contato contato = dao.pesquisar(cont);

	System.out.println("Nome: "+contato.getNome());
	System.out.println("Email: "+contato.getEmail());
	System.out.println("Endereço: "+contato.getEndereco());
	System.out.println("Data de Nascimento: "+contato.getDataNascimento().getTime());
}

}
[/code]

mais esta sendo gerado o seguinte erro

[quote]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:87)
at br.com.caelum.jdbc.teste.TestePesquisa.main(TestePesquisa.java:11)
Caused by: java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:842)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5657)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5577)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5617)
at br.com.caelum.jdbc.dao.ContatoDAO.pesquisar(ContatoDAO.java:75)
… 1 more[/quote]

Alguem sabe porque esta gerando esse erro?
eu testei o comando no SQL e esta correto
o que esta errado

Obrigado

Axo que o erro tá aki:

 System.out.println("Data de Nascimento: "+contato.getDataNascimento().getTime());  

O que você queria fazer com esse .getTime() ?

Ai era um metodo para informar a data que foi feita a ultima alteração

Tenho o mesmo metodo em uma função que retorna todos os contatos do banco de dados e esta funcionando perfeitamente

O que você acha que eu devo fazer?

Obrigado

Já tentou não fechar nem o stmt e o rs, é pouco provável, mas pode ser. E antes de você retornar ou utilizar o
ResultSet sempre verifique se ele está ou não com um valor null, porque não é em toda pesquisa que o resultado é positivo.

Ah olha só, você está instanciando a classe Contato somente para passar um valor “ID” para o método
de pesquisa, seria mais conveniente passar somente o número inteiro, já que é somente ele que você
está utilizando para fazer a pesquisa

WendersonLP, Obrigado pela observação já alterei na minha classe

Porem fiz os testes e ainda não deu certo
Vo continuar tentando

Obrigado

[quote=ma.pops]Boa noite

Tenho esse metodo em uma classe DAO…

Alguem sabe porque esta gerando esse erro?
eu testei o comando no SQL e esta correto
o que esta errado

Obrigado[/quote]

Faça um teste desta forma:

	public Contato pesquisar(Contato cont){
		try {
			Contato contato = new Contato();
			PreparedStatement stmt = this.connection.prepareStatement("select * from contatos where id=?");
			stmt.setLong(1, cont.getId());
			ResultSet rs = stmt.executeQuery();
			
			if(rs.next()) { // Detalhe que estava faltando.
				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);
			}
			
			rs.close();
			stmt.close();
			return contato;
		} catch (SQLException e) {
			throw new RuntimeException(e);
			//e.printStackTrace();
			//return new Contato();
		}
	}

thiagotn,

Cara deu certo não sabia que precisa disso
Valew mesmo heim

Obrigado