Mysql
 sql >> Base de données >  >> RDS >> Mysql

Gestion des datetimes et des horodatages MySQL en Java

Côté Java, la date est généralement représentée par le (mal conçu, mais cela mis à part) java.util.Date . Il est essentiellement soutenu par le Heure d'époque dans la saveur d'un long , également appelé horodatage. Il contient des informations sur les parties date et heure. En Java, la précision est en millisecondes.

Du côté SQL, il existe plusieurs types de date et d'heure standard, DATE , TIME et TIMESTAMP (dans certaines bases de données également appelées DATETIME ), qui sont représentés dans JDBC sous la forme java.sql.Date , java.sql.Time et java.sql.Timestamp , toutes les sous-classes de java.util.Date . La précision dépend de la base de données, souvent en millisecondes comme Java, mais elle peut aussi être en secondes.

Contrairement à java.util.Date , la java.sql.Date contient uniquement des informations sur la partie date (année, mois, jour). Le Time contient uniquement des informations sur la partie horaire (heures, minutes, secondes) et le Timestamp contient des informations sur les deux parties, comme java.util.Date fait.

La pratique normale pour stocker un horodatage dans la base de données (ainsi, java.util.Date côté Java et java.sql.Timestamp côté JDBC) consiste à utiliser 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 pratique normale pour obtenir un horodatage de la base de données consiste à utiliser ResultSet#getTimestamp() .

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