Duvida com metodo getContatoPorID[RESOLVIDO]

4 respostas
maxmustang

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

4 Respostas

pmlm

Tens duas linhas trocadas no código.

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

maxmustang

blz... brigadao.. funcionou

só que mudou o erro
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)
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:
maxmustang
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();
	}
Connectado
Nome: Max
Endereõ: Rua Vassouras 585

xD
brigadao ai

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

abraço

pmlm

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.

Criado 13 de novembro de 2009
Ultima resposta 13 de nov. de 2009
Respostas 4
Participantes 2