Boa tarde a todos,
Gostaria de divulgar aqui um pequeno problema que ocorreu comigo enquanto apreciava a apostila de desenvolvimento web da caelum, a fj-21.
No exercício 2.11 da página (pagina 17 e 18) ele faz um pequeno código para conexao e inserção ao banco de dados:
O código gerado pelo eclipse seguindo a risca a apostila fica da seguinte forma
Classe Contato:
package br.com.caelum.jdbc.modelo;
import java.util.Calendar;
public class Contato {
private Long id;
private String nome;
private String email;
private String endereco;
private Calendar dataNascimento;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public Calendar getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
this.dataNascimento = dataNascimento;
}
}
O problema encontrado foi na classe seguinte, ContatoDAO
Na apostila está dessa forma:
package br.com.caelum.jdbc.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;
public class ContatoDAO {
// a conexao com o banco de dados
private Connection connection;
public ContatoDAO() {
this.connection = new ConnectionFactory().getConnection();
}
public void adiciona(Contato contato) {
String sql = "insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";
try {
// prepared statement para inserção
PreparedStatement stmt = connection.prepareStatement(sql);
// seta os valores
stmt.setString(1, contato.getNome());
stmt.setString(2, contato.getEmail());
stmt.setString(3, contato.getEndereco());
stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
// executa
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException();
}
}
}
Porém, quando você cria a classe seguinte (TestaInsere) ele dá um problema de compilação:
Conectado ao Banco de Dados!
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments (int, Date)
at br.com.caelum.jdbc.dao.ContatoDAO.adiciona(ContatoDAO.java:31)
at br.com.caelum.jdbc.teste.TestaInsere.main(TestaInsere.java:22)
Como fiz e refiz tudo com a máxima atenção, tentei descobrir o problema: e o problema está nesta linha em ContatoDAO
stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
Ao invés de utilizar desta forma, com a ajuda do compilador, propus a seguinte solução e funcionou sem problemas:
stmt.setDate(4, new java.sql.Date(contato.getDataNascimento().getTimeInMillis()));
Caso eu não tenha errado nada, ou esqueça de algo (estou iniciando em desenvolvimento web com java), me digam. Caso contrário, esta é uma sugestão de atualização.
Que, por sinal, é excelente! Parabéns aos que ajudaram a construir, estou achando um máximo estudar por ela.
Obrigado