Galera, qdo o cliente digitar a data no textField ele digita no formato 20/09/2010 só q pára inserir no bando de dados tem que entrar no formato 2010-09-20 e qdo for fazer a consulta ele tem q pegar do banco no formato 2010-09-20 e mostrar pro cliente no formato 20/09/2010. Como posso fazer isso de uma maneira bem simples? Já tentei de tudo e não consegui. Alguém poderia me dar uma ajuda com esse código?
Vlw!
Transformar 20/09/2010 em 2010-09-20
6 Respostas
Use a classe SimpleDateFormat para formatar e parsear a data.
Para gravar no banco de dados use o PreparedStatement. Assim você usa o objeto do tipo DateTime diretamente, sem precisar se preocupar com o formato do banco (o que torna sua aplicação mais portável entre vários BDs).
O único local que datas devem ser Strings é na interface gráfica. No banco, nas classes de negócio, no tablemodel e em demais partes do sistema, sua data será do tipo DateTime ou Calendar. Nunca String.
Até porque um java.util.Date ocupa apenas 8 bytes (internamente contém um simples “long”) (mais um cabeçalho de objeto, que é por volta de 8 bytes) na memória, sendo que uma simples String com 8 caracteres (só a data, como “20100401”) já ocupa 16 bytes (cada caracter ocupa 2 bytes), mais 2 cabeçalhos de objetos (todo objeto String contém um objeto char[]).
Certo, mas Viny a data tá em String só pra preparar pra inseiri no banco, pq primeiro eu monto uma String e jogo pro Banco (ExecuteSQL). O campo DATA no Banco de Dados tá como tipo DATE.
Por isso que falei em usar o PreparedStatement.
Com ele, você não “monta strings” para o banco. Você usa os campos com ?, e depois deixa o PreparedStatement se preocupar com os tipos específicos dos dados. Por exemplo:
int id = 2;
DateTime date = new DateTime();
String sql = "INSERT INTO tabela(id, date) VALUES(?, ?)";
PreparedStament stmt = conn.prepareStatement(sql);
stmt.setInt(1, id);
stmt.setDate(2, date);
stmt.executeUpdate();
Concatenar Strings gera um código sujeito a dependency injection. Também é trabalhoso, pois exige que você trate caracteres especiais como aspas simples. E, por fim, também é pouco portável, pois bancos diferentes podem exigir formatos de dados diferentes.
Qto a portabilidade de bancos concordo totalmente com vc Viny, mas via de conhecimanto: da maneira que fiz montando uma String e jogando no banco num campo com formato DATE, depois é possível fazer comparações com essas datas? tipo >= <= > < ?
VLW
Sim, é possível sim.