In Java, la data è solitamente rappresentata da (mal progettato, ma a parte) java.util.Date
. È fondamentalmente supportato da Epoch time
nel sapore di un long
, noto anche come timestamp. Contiene informazioni sia sulla parte della data che dell'ora. In Java, la precisione è in millisecondi.
In SQL, ci sono diversi tipi di data e ora standard, DATE
, TIME
e TIMESTAMP
(in alcuni DB chiamati anche DATETIME
), che sono rappresentati in JDBC come java.sql.Date
, java.sql.Time
e java.sql.Timestamp
, tutte le sottoclassi di java.util.Date
. La precisione dipende dal DB, spesso in millisecondi come Java, ma può anche essere in secondi.
Contrariamente a java.util.Date
, il java.sql.Date
contiene solo informazioni sulla parte della data (anno, mese, giorno). Il Time
contiene solo informazioni sulla parte temporale (ore, minuti, secondi) e il Timestamp
contiene informazioni su entrambe le parti, come java.util.Date
fa.
La pratica normale per memorizzare un timestamp nel DB (quindi, java.util.Date
lato Java e java.sql.Timestamp
nel lato JDBC) è utilizzare 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);
La pratica normale per ottenere un timestamp dal DB consiste nell'usare ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.