Olá pessoal sou novato em desenvolvimento para web
estou com dúvidas em como lidar com o tipo date,
preciso inserir datas em algumas colunas da tabela
e em outras preciso apenas de inserir horas.
Se alguém tiver um exemplo, uma fonte em
que eu possa aprender por favor passa ai
você salvar o Date e em seguida recupera esse valor
Dá uma olhada nesse link:
http://www.guj.com.br/java/149-hora-e-data-como-posso-pegar
em java use:
java.util.Date date = new Date()
coluna no Postgres será:
data timestamp without time zone NOT NULL,
desta forma ele guardará no banco assim:
2011-05-26 17:29:00
sua aplicaçação é jsf?
se for, na hora de recuperar a data na tela pode formata-la da forma que quiser segue um exemplo:
<h:outputText value="#{obj.data}">
<f:convertDateTime pattern="dd/MM/yyyy - HH:mm" />
</h:outputText>
Ve se te ajuda!
Surgiu uma nova dúvida, olhem o metodo que salva o meu cliente no BD:
@Override
public void salvarUsuario(Cliente usuario) {
PreparedStatement ps = null;
Connection conexao = null;
try {
String sql = "INSERT INTO usuario ( pnome, unome, endereco, estado, cidade, email, username, data_criacao_conta,"
+ " telefone, senha, cep) "
+ "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
conexao = this.conexao;
ps = conexao.prepareStatement(sql);
ps.setString(1, usuario.getpNome());
ps.setString(2, usuario.getuNome());
ps.setString(3, usuario.getEndereco());
ps.setString(4, usuario.getEstado());
ps.setString(5, usuario.getCidade());
ps.setString(6, usuario.getEmail());
ps.setString(7, usuario.getLogin());
ps.setDate(8, usuario.getData_criacao());// aqui o metodo pes.setDate nao esta aceitando o meu parametro data_criacao que é um atributo do tipo Date da minha classe Cliente
ps.setString(9, usuario.getTelefone());
ps.setString(10, usuario.getSenha());
ps.setString(11, usuario.getCep());
ps.executeUpdate();
} catch (SQLException e) {
throw e;
} finally {
Conexao.closeConnection(conexao, ps);
}
}
Agora o metodo que uso na classe de controle para salvar o cliente, aqui recebo todos os dados do cliente
da minha página jsf e crio um a date para saber a data de criação do meu cliente:
public String cadastraCliente() {
try {
ClienteDAO usrCad = new ClienteDAOImpl();
this.cliente.setData_criacao(new Date());
usrCad.salvarUsuario(this.getCliente());
} catch (Exception e) {
FacesContext contexto = FacesContext.getCurrentInstance();
contexto.addMessage(null, new FacesMessage("Houve algum erro no cadastro."));
return "Ncadastrado";
}
return "cadastrado";
}
A principal dúvida agora é saber com mandar a Date para o BD.
ps.setDate(8, new java.sql.Date(usuario.getData_criacao()) );
Faz assim.
Valeu pelo help pessoal eu encontrei uma solucao:
eu acabei confundindo o java.util.Date com o java.sql.Date, entao troquei o atributo
da classe Cliente por java.sql.Date e no dao ficou assim:
public void salvarUsuario(Cliente usuario) throws VooExceptions {
PreparedStatement ps = null;
Connection conexao = null;
if (usuario == null) {
throw new VooExceptions("Nenhum usuario foi informado!");
}
try {
String sql = "INSERT INTO cliente ( pnome, unome, endereco, estado, cidade, email, username, data_criacao_conta,"
+ " telefone, senha, cep) "
+ "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
conexao = this.conexao;
ps = conexao.prepareStatement(sql);
ps.setString(1, usuario.getPriNome());
ps.setString(2, usuario.getLastNome());
ps.setString(3, usuario.getEndereco());
ps.setString(4, usuario.getEstado());
ps.setString(5, usuario.getCidade());
ps.setString(6, usuario.getEmail());
ps.setString(7, usuario.getLogin());
ps.setDate(8, usuario.getData_criacao());
ps.setString(9, usuario.getTelefone());
ps.setString(10, usuario.getSenha());
ps.setString(11, usuario.getCep());
ps.executeUpdate();
} catch (SQLException e) {
throw new VooExceptions("Houve algum erro no cadastro. " + e);
} finally {
try {
Conexao.closeConnection(conexao, ps);
} catch (Exception ex) {
Logger.getLogger(ClienteDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Quando crio a conta do cliente eu utilizo o java.util.Date para saber a data da criacao e utilizo
o java.util.Date.getTime() para pegar a data em formato Long,
pois o construtor de java.sql.Date aceita apenas um argumento deste tipo ficou assim:
public String cadastraCliente() {
try {
ClienteDAO usrCad = new ClienteDAOImpl();
java.util.Date data = new java.util.Date();
java.sql.Date i = new Date( data.getTime() );
this.cliente.setData_criacao( i );
usrCad.salvarUsuario(this.getCliente());
} catch (Exception e) {
FacesContext contexto = FacesContext.getCurrentInstance();
contexto.addMessage(null, new FacesMessage("Houve algum erro no cadastro." + e));
return "Ncadastrado";
}
return "cadastrado";
}
Muito Obrigado 
Amigo,
a maneira mais fácil que eu conheço de se registrar no banco o momento de criação de uma tupla qualquer é através de TIMESTAMP, que é um recurso do próprio SQL para este propósito. No meu script de criação da tabela no SQL está:
CREATE TABLE ...(...
`data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, ...)
Setado desta forma, eu nem preciso incluir o campo data na minha query de fazer o INSERT. O banco já o preenche automaticamente no momento da inclusão da nova tupla com a data e hora atuais.
Com este código, você não precisa digitar absolutamente nada no seu sistema, o próprio SQL resolve sozinho a questão da data de criação do seu cliente.
A idéia do timestamp é legal mais infelizmente não vou poder utilizar,
pois é para um trabalho em grupo de BD e a na documentação que o
grupo fez e j[a entregou para a prof, da qual eu quase n fiz parte,
eles definiram o tipo como Date, agora eu tenho q usar T.T