No lado Java, a data geralmente é representada pelo (mal projetado, mas isso de lado)
java.util.Date
. É basicamente apoiado pelo Epoch time
no sabor de um long
, também conhecido como carimbo de data/hora. Ele contém informações sobre as partes de data e hora. Em Java, a precisão é em milissegundos. No lado do SQL, existem vários tipos de data e hora padrão,
DATE
, HORA
e TIMESTAMP
(em alguns bancos de dados também chamados de DATETIME
), que são representados no JDBC como java.sql.Data
, java.sql.Time
e java.sql.Timestamp
, todas as subclasses de java.util.Date
. A precisão depende do banco de dados, geralmente em milissegundos como Java, mas também pode ser em segundos. Ao contrário de
java.util.Date
, o java.sql.Date
contém apenas informações sobre a parte da data (ano, mês, dia). O Hora
contém apenas informações sobre a parte do tempo (horas, minutos, segundos) e o Timestamp
contém informações sobre as duas partes, como java.util.Date
faz. A prática normal de armazenar um carimbo de data/hora no banco de dados (portanto,
java.util.Date
no lado Java e java.sql.Timestamp
no lado JDBC) é usar PreparedStatement#setTimestamp()
. java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);
A prática normal para obter um carimbo de data/hora do banco de dados é usar
ResultSet#getTimestamp()
. Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.