Di sisi Java, tanggal biasanya diwakili oleh (dirancang dengan buruk, tetapi selain itu) java.util.Date
. Ini pada dasarnya didukung oleh Epoch time
dalam rasa long , juga dikenal sebagai stempel waktu. Ini berisi informasi tentang bagian tanggal dan waktu. Di Java, presisinya dalam milidetik.
Di sisi SQL, ada beberapa tipe tanggal dan waktu standar, DATE , TIME dan TIMESTAMP (di beberapa DB juga disebut DATETIME ), yang direpresentasikan dalam JDBC sebagai java.sql.Date
, java.sql.Time
dan java.sql.Timestamp
, semua subclass dari java.util.Date . Presisinya bergantung pada DB, seringkali dalam milidetik seperti Java, tetapi bisa juga dalam hitungan detik.
Berbeda dengan java.util.Date , java.sql.Date hanya berisi informasi tentang bagian tanggal (tahun, bulan, hari). Time hanya berisi informasi tentang bagian waktu (jam, menit, detik) dan Timestamp berisi informasi tentang kedua bagian, seperti java.util.Date tidak.
Praktik normal untuk menyimpan cap waktu di DB (dengan demikian, java.util.Date di sisi Java dan java.sql.Timestamp di sisi JDBC) adalah menggunakan 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);
Praktik normal untuk mendapatkan cap waktu dari DB adalah dengan menggunakan ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.