Pesquisa em um Banco de dados

6 respostas
ma.pops

Boa noite

Tenho esse metodo em uma classe DAO

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();
		}
	}

e estou usando esta classe para realizar o teste

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());
	}
}

mais esta sendo gerado o seguinte erro

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

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

Obrigado

6 Respostas

pedroroxd

Axo que o erro tá aki:

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

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

ma.pops

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

WendersonLP

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

ma.pops

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

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

Obrigado

thiagotn

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

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();
		}
	}
ma.pops

thiagotn,

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

Obrigado

Criado 22 de abril de 2010
Ultima resposta 23 de abr. de 2010
Respostas 6
Participantes 4