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.