Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Manipulando datas e timestamps do MySQL em Java


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.