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.