Na minha base MySQL os valores gravados na tabela são 4,5 e 6.
Esse campo é um auto-incremento, mas as linhas acima só exibem “0” para todos os objetos.
Por quê isto está acontecendo ? Como resolver este probleminha ?
Coloque o código da classe Contato e ContatoDAO também.
D
Dantalian
Como o Joao.Gabriel disse, você precisa postar as outras classes, pois essa parte do código que foi postada, pra mim não tem erros.
Talvez o incremento zere cada vem que você chama não sei. Posta ae ^^
M
maxcarvalho
Pessoal,
Segue, abaixo, o código-fonte da classe Contato
/** * */packagebr.com.caelum.jdbc.modelo;/** * @author Max Carvalho * */publicclassContato{privateLongid;privateStringnome;privateStringendereco;privateStringemail;publicLonggetId(){returnid;}publicvoidsetId(Longid){this.id=id;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEndereco(){returnendereco;}publicvoidsetEndereco(Stringendereco){this.endereco=endereco;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}}
E logo abaixo, o da classe ContatoDAO
/** * */packagebr.com.caelum.jdbc.dao;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;importbr.com.caelum.jdbc.ConnectionFactory;importbr.com.caelum.jdbc.modelo.Contato;/** * @author Max Carvalho * */publicclassContatoDAO{// a conexão com o banco de dadosprivateConnectionconnection;publicContatoDAO()throwsSQLException{this.connection=ConnectionFactory.getConnection();}publicvoidadiciona(Contatocontato)throwsSQLException{// prepared statement para inserçãoStringsql="insert into contatos (nome,email,endereco) values (?,?,?)";PreparedStatementstmt=connection.prepareStatement(sql);// seta os valoresstmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());// executastmt.execute();stmt.close();}}
Espero que consigam me ajudar.
Agradece,
Max
Y
Yky_Mattshawn
Faltou tu postares o método getLista do DAO.
M
maxcarvalho
Pessoal,
Me desculpem, mas a versão da classe ContatoDAO que tenho no Eclipse aqui no trabalho está desatualizada.
Como eu tenho mexido nela aqui e em casa, terminou acontecendo este lance de falta de um controle melhor de versão.
Até amanhã estarei postando a versão completa.
De qq forma, já agraço-lhes pela enorme atenção.
[]'s
Max
M
maxcarvalho
Pessoal,
Conforme solicitado, segue, abaixdo, o código completo da classe ContatoDAO, incluindo o método getLista().
/** * classe ContatoDAO */packagebr.com.caelum.jdbc.dao;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.List;importjava.util.ArrayList;importbr.com.caelum.jdbc.modelo.Contato;importbr.com.caelum.jdbc.ConnectionFactory;/** * @author Max Carvalho * */publicclassContatoDAO{// conexao com o banco de dadosprivateConnectionconnection;publicContatoDAO()throwsSQLException{this.connection=ConnectionFactory.getConnection();}publicvoidadiciona(Contatocontato)throwsSQLException{// prepared statement para insercaoStringsql="insert into contatos(nome,email,endereco) values (?,?,?)";PreparedStatementstmt=connection.prepareStatement(sql);// set os valoresstmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());//executastmt.execute();stmt.close();}publicList<Contato>getLista()throwsSQLException{PreparedStatementstmt=this.connection.prepareStatement("select * from contatos");ResultSetrs=stmt.executeQuery();List<Contato>contatos=newArrayList<Contato>();while(rs.next()){// criando o objeto ContatoContatocontato=newContato();contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));// adicionando o objeto à listacontatos.add(contato);}rs.close();stmt.close();returncontatos;}publicContatopesquisar(intidContato)throwsSQLException{Stringsql="select * from contatos where id = ?";PreparedStatementstmt=this.connection.prepareStatement(sql);stmt.setInt(1,idContato);ResultSetrs=stmt.executeQuery();// se o contato não existir retorna nullContatocontato=null;while(rs.next()){// criando o objeto Contatocontato=newContato();contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));}rs.close();stmt.close();returncontato;}}
Agradece,
Max
Y
Yky_Mattshawn
O atributo ID está sempre zerado porque tu não estás alimentando-o.
Tens de alterar o loop no getLista, ficando mais ou menos assim:
Não pensei que isto foste necessário, porque o campo correspondente na tabela em MySQL é um auto-incremento, daí pensei que o Resulset já pegasse o valor dele automaticamente da forma como está no banco.
Quer dizer que mesmo o campo sendo auto-incremento, eu preciso atualizar o estado do objeto a cada passagem do “cursor” resulset ?
Mesmo assim, muito obrigado pela dica.
[]'s
Max
Y
Yky_Mattshawn
Sim, tu precisas atualizar o estado do objeto.
O teu Bean não tem nenhuma relação com a tua tabela no banco de dados.
Marky.Vasconcelos
Uma questão diferente que responde a sua.
O objeto Contato vai saber seu próprio id apenas setando os outros campos?
M
maxcarvalho
Entendido.
Obrigado pessoal.
Valeu mesmo, aí pela ajuda.
M
maxcarvalho
Infelzimente, continua dando o mesmo erro cloquei assim :
Deu certo sim. Desculpem o engano.
Segue, abaixo, a versão final classe ContatoDAO :
packagebr.com.caelum.jdbc.dao;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.List;importjava.util.ArrayList;importbr.com.caelum.jdbc.modelo.Contato;importbr.com.caelum.jdbc.ConnectionFactory;publicclassContatoDAO{privateConnectionconnection;publicContatoDAO()throwsSQLException{this.connection=ConnectionFactory.getConnection();}publicvoidadiciona(Contatocontato)throwsSQLException{Stringsql="insert into contatos(nome,email,endereco) values (?,?,?)";PreparedStatementstmt=connection.prepareStatement(sql);stmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());stmt.execute();stmt.close();}publicList<Contato>getLista()throwsSQLException{PreparedStatementstmt=this.connection.prepareStatement("select * from contatos");ResultSetrs=stmt.executeQuery();List<Contato>contatos=newArrayList<Contato>();while(rs.next()){Contatocontato=newContato();contato.setId(rs.getLong("id"));// <<<<< contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));contatos.add(contato);}rs.close();stmt.close();returncontatos;}publicContatopesquisar(intidContato)throwsSQLException{Stringsql="select * from contatos where id = ?";PreparedStatementstmt=this.connection.prepareStatement(sql);stmt.setInt(1,idContato);ResultSetrs=stmt.executeQuery();// se o contato não existir retorna nullContatocontato=null;while(rs.next()){contato=newContato();contato.setId(rs.getLong("id"));contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));}rs.close();stmt.close();returncontato;}publicvoidaltera(Contatocontato)throwsSQLException{PreparedStatementstmt=connection.prepareStatement("update "+"contatos set nome=?, email=?, endereco=? where id=?");stmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());stmt.setLong(4,contato.getId());stmt.execute();stmt.close();}publicvoidremove(Contatocontato)throwsSQLException{PreparedStatementstmt=connection.prepareStatement("delete from contatos where id=?");stmt.setLong(1,contato.getId());stmt.execute();stmt.close();}}
Ainda vou melhor o código dos métodos altera()e remove() para não executarem suas funcionalidades de o contato não existir.
Muito obrigado a todos.
Valeu aí pela ajuda.
[ ]'s Max.