På Java-siden er datoen normalt repræsenteret af (dårligt designet, men det til side) java.util.Date
. Det er dybest set understøttet af Epoketiden
i smagen af en lang
, også kendt som et tidsstempel. Den indeholder oplysninger om både dato- og tidsdelene. I Java er præcisionen i millisekunder.
I SQL-siden er der flere standard dato- og tidstyper, DATE
, TID
og TIMESTAMP
(i nogle DB'er også kaldet DATETIME
), som er repræsenteret i JDBC som java.sql.Date
, java.sql.Time
og java.sql.Timestamp
, alle underklasser af java.util.Date
. Præcisionen er DB-afhængig, ofte i millisekunder som Java, men den kan også være i sekunder.
I modsætning til java.util.Date
, java.sql.Date
indeholder kun oplysninger om datodelen (år, måned, dag). Tid
indeholder kun information om tidsdelen (timer, minutter, sekunder) og Timestamp
indeholder information om begge dele, f.eks. som java.util.Date
gør.
Den normale praksis at gemme et tidsstempel i databasen (altså java.util.Date
i Java side og java.sql.Timestamp
i JDBC-siden) er at bruge 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);
Den normale praksis for at få et tidsstempel fra DB er at bruge ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.