2010-04-06 19 views
9

java.util.Date, java.util.Timetamp, birçok kişi için büyük bir karışıklığa neden oluyor gibi görünüyor. StackOverflow içinde çok fazla soru var, maalesef benim sorum biraz bükülmüş.ResultSet.getTimestamp ("date") vs ResultSet.getTimestamp ("date"), Calendar.getInstance (tz))

2 JDBC API'si var. Nasıl yapmalılar? RDBMS’ler arasında herhangi bir tutarlılık var mıydı?

Birisi Sybase'de bilgiye sahipse, deneyiminizi paylaşır mısınız?

cevap

23

İ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.

+0

İ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

İlgili konular