java.util.Datevs java.sql.Date:什么时候使用,为什么?
java.util.Datevs java.sql.Date
恭喜,你已经使用JDBC达到了我最喜欢的功能:Date类处理。
基本上,数据库通常至少支持三种形式的日期时间字段,即日期,时间和时间戳。它们每个在JDBC中都有一个对应的类,并且每个都进行了扩展java.util.Date。这三个中的每个的快速语义如下:
java.util.Date
java.sql.Date
java.sql.Time
java.sql.Timestamp
util.Date
sql.Date
sql.Time
最后:使用哪个?
确实取决于字段的SQL类型。PreparedStatement有三个值的设置器,#setDate()分别是for sql.Date,#setTime()for sql.Time和#setTimestamp()for sql.Timestamp。
PreparedStatement
#setDate()
for sql.Date,#setTime()for sql.Time和#setTimestamp()for sql.Timestamp
请注意,如果你使用的ps.setObject(fieldIndex, utilDateObject);话,实际上可以util.Date为大多数JDBC驱动程序提供一个普通的驱动程序,它会很高兴地吞噬它,就好像它是正确的类型一样,但是当你随后请求数据时,你可能会发现实际上丢失了一些东西。
ps.setObject(fieldIndex, utilDateObject)
我真的是说完全不应该使用任何日期。
我的意思是将毫秒/纳秒保存为普通的long,并将其转换为你正在使用的任何对象(强制性的joda-time插件)。一种可行的方法是将日期部分存储为一个长期时间部分,将日期和时间部分存储为另一个,例如现在将是20100221和154536123。这些不可思议的数字可以在SQL查询中使用,并且可以从数据库移植到另一个数据库中,将使你完全避免JDBC / Java Date API:s的这一部分。