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