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.