栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

java.util.Date与java.sql.Date

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java.util.Date与java.sql.Date

恭喜,你已经使用JDBC达到了我最喜欢的功能:Date类处理。

基本上,数据库通常至少支持三种形式的日期时间字段,即日期,时间和时间戳。它们每个在JDBC中都有一个对应的类,并且每个都进行了扩展

java.util.Date
。这三个中的每个的快速语义如下:

  • java.sql.Date
    对应于SQL DATE,这表示它存储年,月和日,而时,分,秒和毫秒被忽略。此外,sql.Date它与时区无关。
  • java.sql.Time
    对应于SQL TIME,并且应该很明显,它仅包含有关小时,分钟,秒和毫秒的信息。
  • java.sql.Timestamp
    对应于SQL TIMESTAMP,它是具有可自定义精度的精确日期,以纳秒为单位(请注意,
    util.Date
    仅支持毫秒!)。
    与这三种类型相关联使用JDBC驱动程序时,最常见的错误之一是这些类型的处理不正确。这意味着
    sql.Date
    特定于时区,
    sql.Time
    包含当前的年,月和日等。

最后:使用哪个?

确实取决于字段的SQL类型。

PreparedStatement
有三个值的设置器,
#setDate()
分别是
for sql.Date,#setTime()for sql.Time和#setTimestamp()for sql.Timestamp

请注意,如果你使用的

ps.setObject(fieldIndex, utilDateObject)
;话,实际上可以util.Date为大多数JDBC驱动程序提供一个普通的驱动程序,它会很高兴地吞噬它,就好像它是正确的类型一样,但是当你随后请求数据时,你可能会发现实际上丢失了一些东西。

我真的是说完全不应该使用任何日期。

我的意思是将毫秒/纳秒保存为普通的long,并将其转换为你正在使用的任何对象(强制性的joda-time插件)。一种可行的方法是将日期部分存储为一个长期时间部分,将日期和时间部分存储为另一个,例如现在将是20100221和154536123。这些不可思议的数字可以在SQL查询中使用,并且可以从数据库移植到另一个数据库中,将使你完全避免JDBC / Java Date API:s的这一部分。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380650.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号