Mysql
 sql >> Database >  >> RDS >> Mysql

Gestione di datetime e timestamp MySQL in Java

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.