Inserir Objeto tipo Date no banco de dados [Resolvido]

Olá

É o seguinte, eu gostaria de receber uma String do usuário, passa-la para o tipo Date para cadastrar no banco de dados:

[code]
Scanner s = new Scanner(System.in);
String data = s.next();

Date date = new SimpleDateFormat(“dd/MM/yyyy”).parse(data);

[/code] 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

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.

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

[code]

    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>[/code] 

classe ServContato

[code] 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); [/code]

classe ContatoDAO

[code]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);
    }
} [/code]

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

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()));