Pertama, Anda membingungkan java.util
dengan java.sql
. Saat menggunakan PreparedStatement#setDate()
dan ResultSet#getDate()
, Anda memerlukan java.sql.Date
. Analog, saat menggunakan PreparedStatement#setTimestamp()
dan ResultSet#getTimestamp()
anda memerlukan java.sql.Timestamp
.
Kedua, penting untuk dipahami bahwa java.sql.Date
hanya mewakili tanggal (tahun, bulan, hari) dan tidak kurang atau lebih. Ini akan dipetakan ke SQL DATE
jenis lapangan. java.sql.Timestamp
mewakili stempel waktu (tahun, bulan, hari, jam, menit, detik, milidetik), persis seperti java.util.Date
dan java.util.Calendar
melakukan. Ini akan dipetakan ke TIMESTAMP
SQL atau DATETIME
jenis bidang.
Mengenai zona waktu, Anda memerlukannya saat database tidak menyimpan informasi zona waktu (dengan demikian, semua cap waktu disimpan dalam UTC (GMT)). Anda kemudian dapat melewati Calendar
yang berisi informasi tentang zona waktu saat ini, sehingga driver JDBC dapat menyesuaikan stempel waktu UTC ke stempel waktu yang sesuai dengan zona waktu. Jika misalnya GMT+1, maka driver JDBC akan menambahkan satu jam ke stempel waktu sebelum kembali.