İlk olarak, java.sql
ile java.util
kafasını karıştırıyorsunuz. PreparedStatement#setDate()
ve ResultSet#getDate()
kullanırken, java.sql.Date
gerekir. Benzer şekilde, PreparedStatement#setTimestamp()
ve ResultSet#getTimestamp()
kullanırken, java.sql.Timestamp
'a ihtiyacınız vardır.
İkincisi, java.sql.Date
sadece tarih (yıl, ay, gün) ve hiçbir şey daha az ya da daha çok temsil ettiğini anlamak önemlidir. Bu, bir SQL DATE
alan türüne eşlenecektir. java.sql.Timestamp
, java.util.Date
ve java.util.Calendar
gibi zaman damgasını (yıl, ay, gün, saat, dakika, saniye, milisaniye) temsil eder. Bu, bir SQL TIMESTAMP
veya DATETIME
alan türüne eşlenecektir.
Zaman dilimi hakkında, veritabanı zaman dilimi bilgilerini saklamıyorsa buna gereksiniminiz vardır (bu nedenle, tüm zaman damgaları UTC (GMT) içinde depolanır). Daha sonra geçerli saat dilimi hakkında bilgi içeren bir Calendar
iletebilir, böylece JDBC sürücüsü UTC zaman damgasını saat dilimini karşılayan zaman damgasına göre ayarlayabilir. Örneğin GMT + 1 ise, JDBC sürücüsü dönmeden önce zaman damgasına bir saat ekleyecektir.
İyi cevap. JDBC'deki çeşitli Date sınıflarının varyasyonları hakkında daha fazla bilgi için, buradaki gönderiye bakabilirsiniz: http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date/2306051# 2306051 – Esko