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.