Inserir Objeto tipo Date no banco de dados [Resolvido]

3 respostas
Gustavo.L

Olá

É o seguinte, eu gostaria de receber uma String do usuário, passa-la para o tipo Date para cadastrar no banco de dados:
Scanner s = new Scanner(System.in);
String data = s.next();

Date date = new SimpleDateFormat("dd/MM/yyyy").parse(data);
Só que isso não funciona, o banco de dados aceita somente neste parâmetro:

yyyy-MM-dd

e quando eu faço um System.out.println(date); me retorna isto:

Exemplo: "Sat Nov 18 00:00:00 BRST 1989" isto não é nem perto do que o banco de dados aceita.
Ajuda ae
flwzz

3 Respostas

V

Gustavo,

vc está usando JDBC ou Hibernate para persistência? qual o tipo da coluna no BD?

Vc pode passar o objeto date diretamente para o BD, o mecanismo de persistência se encarrega da conversão.

Gustavo.L

Estou usando JDBC

Mas este exemplo eu criei só um aplicativo Java para testar. Meu projeto principal é para WEB. Eu achei que se eu conseguisse converter da maneira certa daria certo tbm na hora de cadastrar no BD.

Ai vai o código:

JSP adicionarContato.jsp

<form action="ServContato" method="POST" >

        Nome: <input type="text" maxlength="100" name="nome" size="15"> <br>
        Email: <input type="text" maxlength="110" name="email" size="15"> <br>
        Endereço: <input type="text" maxlength="100" name="endereco" size="15"> <br>
        Data de Nascimento: <input type="text" maxlength="200" name="dataNascimento" size="15"> <br>
        <input type="hidden" name="executar" value="adicionar">

        <input type="submit" value="Adicionar">
        <input type="reset" value="Limpar Campos">

        </form>

classe ServContato

String nome = request.getParameter("nome");
                String email = request.getParameter("email");
                String endereco = request.getParameter("endereco");
                String dataInicial = request.getParameter("dataNascimento");
                Date dataNascimento = new Date();

                try {
                    dataNascimento = new SimpleDateFormat("dd/MM/yyyy").parse(dataInicial);
                } catch (ParseException e) {
                    out.println("Erro na conversão de Data!!");
                }

                Contato contato = new Contato(nome, email, endereco, dataNascimento);

                ContatoDAO dao = new ContatoDAO();
                dao.adicionar(contato);

classe ContatoDAO

public void adicionar(Contato contato) {

        String sql = "insert into contato(nome, email, endereco, dataNascimento) values (?,?,?,?)";

        try {

            PreparedStatement stmt = con.prepareStatement(sql);

            stmt.setString(1, contato.getNome());
            stmt.setString(2, contato.getEmail());
            stmt.setString(3, contato.getEndereco());
            stmt.setDate(4, (java.sql.Date) contato.getDataNascimento());

            stmt.execute();
            stmt.close();
        } catch (SQLException e) {
            System.out.println("Não foi possível adicionar o contato ao Banco de Dados \nErro: " + e);
        }
    }

Desse jeito não está cadastrando no Banco de Dados =/

B

Um java.sql.Date é um java.util.Date, mas um java.util.Date não é um java.sql.Date. Portanto, um cast, tal como você fez, não vai funcionar.

O correto, no seu caso, é converter um java.util.Date em um java.sql.Date ou em um java.sql.Timestamp (dependendo do tipo da sua coluna do banco de dados), mais ou menos assim:

stmt.setDate(4,new java.sql.Date (contato.getDataNascimento().getTime()));
Criado 27 de dezembro de 2010
Ultima resposta 27 de dez. de 2010
Respostas 3
Participantes 3