Duvida com metodo getContatoPorID[RESOLVIDO]

grande galera do Guj… tudo tranquilo?
to com a duvido no seguinte metodo

public void getContatoPorId(Contato contato) throws SQLException{ PreparedStatement stmt = this.connection.prepareStatement("Select nome, email from Contatos where id = ?");//query ok ResultSet rs = stmt.executeQuery(); stmt.setInt(1, contato.getId()); while(rs.next()){ rs.getString("nome" + ": " + rs.getString("endereco")); } rs.close(); stmt.close(); }

eu to passando um contato(um id de um contato) pra pegar seu nome e email
só que quando eu defino

	public static void main(String[] args) throws SQLException {
		ContatoDao dao = new ContatoDao();
		Contato contato = new Contato();
		contato.setId(20);
		System.out.println(contato.getId());
		dao.getContatoPorId(contato);
		
	}

ele lança o seguinte erro

Connectado
20
Exception in thread "main" java.sql.SQLException: No value specified for parameter 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
	at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2513)
	at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2489)
	at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2415)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2169)
	at br.com.BandaIADE.jdbc.dao.ContatoDao.getContatoPorId(ContatoDao.java:71)
	at br.com.BandaIADE.jdbc.JDBCTestaProcuraDAO.main(JDBCTestaProcuraDAO.java:14)
com.mysql.jdbc.JDBC4PreparedStatement@18fef3d: Select nome, email from Contatos where id = ** NOT SPECIFIED **

conferi a consulta e ela esta certa

Select nome, email from Contatos where id = 20

vlw

Tens duas linhas trocadas no código.

Primeiro tens de fazer o setInt e só depois o executeQuery.

blz… brigadao… funcionou

só que mudou o erro

[code]Connectado
20
Exception in thread “main” java.sql.SQLException: Column ‘endereco’ not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1144)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5549)
at br.com.BandaIADE.jdbc.dao.ContatoDao.getContatoPorId(ContatoDao.java:74)
at br.com.BandaIADE.jdbc.JDBCTestaProcuraDAO.main(JDBCTestaProcuraDAO.java:14)

[/code]

beleza fui la e troquei o metodo…

public void getContatoPorId(Contato contato) throws SQLException{ PreparedStatement stmt = this.connection.prepareStatement("Select nome, endereco from Contatos where id = ?");//query ok stmt.setInt(1, contato.getId()); ResultSet rs = stmt.executeQuery(); while(rs.next()){ rs.getString("nome"); rs.getString("endereco"); } rs.close(); stmt.close(); }

ContatoDao dao = new ContatoDao(); Contato contato = new Contato(); contato.setId(20); dao.getContatoPorId(contato); System.out.println("Nome: " + contato.getNome()); System.out.println("Endereco: " + contato.getEndereco());

Connectado 20 Nome: null Endereco: null
Esqueci de mostrar isso aqui xD
só que ele nao esta amostrando nem o nome nem o endereço
nao entendi :oops:

aeww xD
consegui mudei o metodo rapidinho

	public void getContatoPorId(Contato contato) throws SQLException{
	PreparedStatement stmt = this.connection.prepareStatement("Select nome, endereco from Contatos where id = ?");//query ok
	stmt.setInt(1, contato.getId());
	ResultSet rs = stmt.executeQuery();// o ResultSet TEM que vir depois do stmt.setInt.. pra ele poder passar o id
	while(rs.next()){
		
		contato.setNome((rs.getString("nome")));
		contato.setEndereco(rs.getString("endereco"));
		}
	rs.close();
	stmt.close();
	}[/code]
[code]Connectado
Nome: Max
Endereõ: Rua Vassouras 585

xD
brigadao ai

alias… existe um jeito mais simples e bonito de fazer isso?

abraço

Muda o while para um if, já que como estás a procura de um registo único, não é necessário ter um ciclo, apenas validar que encontrou um registo.