På Java-sidan representeras datumet vanligtvis av (dåligt utformat, men det åt sidan) java.util.Date
. Det stöds i princip av epoktiden
i smaken av en lång
, även känd som en tidsstämpel. Den innehåller information om både datum- och tidsdelarna. I Java är precisionen i millisekunder.
I SQL-sidan finns det flera standardtyper för datum och tid, DATE
, TIME
och TIMESTAMP
(vid vissa DB:s även kallad DATETIME
), som representeras i JDBC som java.sql.Date
, java.sql.Time
och java.sql.Timestamp
, alla underklasser av java.util.Date
. Precisionen är DB-beroende, ofta i millisekunder som Java, men den kan också vara i sekunder.
I motsats till java.util.Date
, java.sql.Date
innehåller endast information om datumdelen (år, månad, dag). Tid
innehåller endast information om tidsdelen (timmar, minuter, sekunder) och Timestamp
innehåller information om båda delarna, som java.util.Date
gör.
Vanlig praxis att lagra en tidsstämpel i databasen (därmed java.util.Date
i Java-sidan och java.sql.Timestamp
på JDBC-sidan) är att använda 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);
Vanlig praxis för att få en tidsstämpel från DB är att använda ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.