sql >> Database >  >> RDS >> Mysql

Omgaan met MySQL-datum- en tijdstempels in Java

Aan Java-kant wordt de datum meestal weergegeven door de (slecht ontworpen, maar dat terzijde) java.util.Date . Het wordt in principe ondersteund door de Epoch-tijd in de smaak van een long , ook wel een tijdstempel genoemd. Het bevat informatie over zowel het datum- als het tijdgedeelte. In Java is de precisie in milliseconden.

Aan de SQL-kant zijn er verschillende standaard datum- en tijdtypen, DATE , TIME en TIMESTAMP (bij sommige DB's ook wel DATETIME ), die in JDBC worden weergegeven als java.sql.Date , java.sql.Time en java.sql.Timestamp , alle subklassen van java.util.Date . De precisie is DB-afhankelijk, vaak in milliseconden zoals Java, maar het kan ook in seconden zijn.

In tegenstelling tot java.util.Date , de java.sql.Date bevat alleen informatie over het datumgedeelte (jaar, maand, dag). De Time bevat alleen informatie over het tijdgedeelte (uren, minuten, seconden) en de Timestamp bevat informatie over beide delen, zoals als java.util.Date doet.

De normale praktijk om een ​​tijdstempel in de database op te slaan (dus java.util.Date in Java-kant en java.sql.Timestamp aan de JDBC-kant) is om 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);

De normale praktijk om een ​​tijdstempel van de DB te verkrijgen, is het gebruik van ResultSet#getTimestamp() .

Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.


  1. SQL Server 2008 Spatial:vind een punt in polygoon

  2. Tabellen en kolommen neerzetten met SQL

  3. Witboek CBO-statistieken

  4. Aan de slag met Postgres 13 op Ubuntu 20.04