Tipos de Dados para Datas, Horas e Minutos
Boa tarde, pessoal.
Estou com as seguintes dúvidas:
1) Qual o melhor tipo de dados para armazenar os seguintes conteúdos levando-se en conta os cenários abaixo:
(a) A data em que um ator executou alguma operação: Date, Calendar ou GregorianCalendar ?;
(b) O horário inicial e o horário final de uma operação: Time, String, int, GregorianCalendar ?
(c) Baseado na definição de (b), qual o tipo para armazenar a diferença entre horario_final e horario_inicial (hh:mm) ?
- dois atributos distintos -> um para horas e outro para minutos ?
- um único atributo -> armazenando horas e minutos ?
E que tipo utilizar: int, String, Calendar, Date, GregorianCalendar, Timestamp ?
2) De posse dessas definições, para armazenar essas informações em um BD (PostgreSQL), qual a correspondência dos atributos em Java para os campos de uma tabela no BD PostgreSQL?
Exemplo:
Java PostgreSQL
========================
String Varchar, Text
int integer
double Numeric, Decimal, Real
float Numeric, Decimal, Real
Date Date, Timestamp
Calendar ???
Timestamp Timestamp
boolean boolean
Agradecendo qualquer ajuda,
Augusto Cesar
Augusto Nunes
Curtidas 0
Respostas
Douglas Eric
28/02/2012
Use um Calendar
use os métodos [b]set[/b] para colocar os valores, retorne a data com getTime() depois que a data do calendar estiver setada
No postgre, use DATE se quiser apenas dia/mês/ano ou TIMESTAMP se quiser a data e hora.
Para salvar no banco, use a própria String gerada, o postgres reconhece o formato
Salve a String date no banco.
OU use um PreparedStatement e use o método setDate()
Calendar c = Calendar.getInstance(); //retorna GregorianCalendar ou outro definido pelo Locale
Date data = c.getTime();
String date = data.toString();
GOSTEI 0
Augusto Nunes
28/02/2012
Olá, Sekkuar, acho que não expliquei bem a minha primeira dúvida, mas vamos lá tentar esclarecer:
- Imaginando que eu tenha uma tabela no Banco de Dados chamada tblAnotacao, cujos campos seriam:
matricula serial primary key not null
nome varchar(30) not null
dtNasc date
horaInicial timestamp
horaFinal timestamp
valorPago numeric(10,2)
obs text
Na definição de uma classe em Java, quais os tipos correspondentes aos definidos no BD?
Se no PostgreSQL eu defino matricula como serial, na classe, eu definiria matricula como int, long, biginteger,...?
E a dtNasc? Na classe seria Date, Calendar, Gregoriancalendar,...?
Estas são as minhas dúvidas (correspondência de tipos de dados de Java para Banco de Dados Relacional - nada de usar Hibernate ou algo parecido)...!!!
Agradecendo a paciência e a atenção,
Augusto
GOSTEI 0
Douglas Eric
28/02/2012
dtNasc, horaInicial e horaFinal são objetos [url=http://docs.oracle.com/javase/7/docs/api/java/util/Date.html]java.util.Date[/url]
Já a chave primária.
Se for SERIAL é int
Se for BIGSERIAL é long.
Mas, eu sempre uso String para as chaves primárias (na aplicação, não no banco). Fica bem mais fácil em várias partes, não precisa converter.
GOSTEI 0
Douglas Eric
28/02/2012
[quote="augustonunes"]Olá, Sekkuar, acho que não expliquei bem a minha primeira dúvida, mas vamos lá tentar esclarecer:
- Imaginando que eu tenha uma tabela no Banco de Dados chamada tblAnotacao, cujos campos seriam:
matricula serial primary key not null
nome varchar(30) not null
dtNasc date
horaInicial timestamp
horaFinal timestamp
valorPago numeric(10,2)
obs text
Na definição de uma classe em Java, quais os tipos correspondentes aos definidos no BD?
Se no PostgreSQL eu defino matricula como serial, na classe, eu definiria matricula como int, long, biginteger,...?
E a dtNasc? Na classe seria Date, Calendar, Gregoriancalendar,...?
Estas são as minhas dúvidas (correspondência de tipos de dados de Java para Banco de Dados Relacional - nada de usar Hibernate ou algo parecido)...!!!
Agradecendo a paciência e a atenção,
Augusto
Tipos de dados relactivo aos campos
------------------------------------------------------------------
Campo Tipo em BD Tipo em Java
------------ ---------------- -------------------------------
matricula serial int
nome varchar(30) String
dtNasc date Date
horaInicial timestamp TimeStamp
horaFinal timestamp TimeStamp
valorPago numeric(10,2) double
obs text String
------------------------------------------------------------------
Obs: Podes usar String para facilitar em todos os campos, excepto aos
campos que representam numeros
GOSTEI 0
Douglas Eric
28/02/2012
[quote="Chandimba"]
Tipos de dados relactivo aos campos
------------------------------------------------------------------
Campo Tipo em BD Tipo em Java
------------ ---------------- -------------------------------
matricula serial int
nome varchar(30) String
dtNasc date Date
horaInicial timestamp TimeStamp
horaFinal timestamp TimeStamp
valorPago numeric(10,2) double
obs text String
------------------------------------------------------------------
Obs: Podes usar String para facilitar em todos os campos, excepto aos
campos que representam numeros
Usar TimeStamp em java???
E double para valores financeiros?
GOSTEI 0
Douglas Eric
28/02/2012
[quote="sekkuar"][quote="Chandimba"]
Tipos de dados relactivo aos campos
------------------------------------------------------------------
Campo Tipo em BD Tipo em Java
------------ ---------------- -------------------------------
matricula serial int
nome varchar(30) String
dtNasc date Date
horaInicial timestamp TimeStamp
horaFinal timestamp TimeStamp
valorPago numeric(10,2) double
obs text String
------------------------------------------------------------------
Obs: Podes usar String para facilitar em todos os campos, excepto aos
campos que representam numeros
Usar TimeStamp em java???
E double para valores financeiros? GOSTEI 0
Douglas Eric
28/02/2012
[quote="Chandimba"][quote="sekkuar"][quote="Chandimba"]
Tipos de dados relactivo aos campos
------------------------------------------------------------------
Campo Tipo em BD Tipo em Java
------------ ---------------- -------------------------------
matricula serial int
nome varchar(30) String
dtNasc date Date
horaInicial timestamp TimeStamp
horaFinal timestamp TimeStamp
valorPago numeric(10,2) double
obs text String
------------------------------------------------------------------
Obs: Podes usar String para facilitar em todos os campos, excepto aos
campos que representam numeros
Usar TimeStamp em java???
E double para valores financeiros? GOSTEI 0
Douglas Eric
28/02/2012
[quote="sekkuar"]
Eu não vejo necessidade de usar o TimeStamp, até porque, isso iria fazer que você tivesse que usar o pacote java.sql na aplicação inteira.
Só um Date resolve.
Eu normalmente gosto de usar o TimeStamp mas vou lembrar da tua dica
[quote="sekkuar"]
E sim, BigDecimal devia ser usado nesse caso, não double.
Double perde a precisão e não deve ser usado em valores financeiros GOSTEI 0
Augusto Nunes
28/02/2012
Pessoal, quero agradecer a ajuda de todos, e pesquisando um pouco mais na Internet, achei algumas informações nesse link http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-type-conversions.html
Penso que ajuda uma pouco a pensarmos nas possibilidades (e olha que eu estava somente procurando uma informação para associar PostgreSQL e Java !!!).
Será que alguém sabe se existe essa mesma estrutura de equivalências para o PostgreSQL? Até agora não achei nada parecido...
Augusto
GOSTEI 0
Douglas Eric
28/02/2012
Só achei isso
http://archives.postgresql.org/pgsql-jdbc/2010-10/msg00062.php
GOSTEI 0