当前位置: 首页 > 面试题库 >

java.util.Date与java.sql.Date

欧阳俊明
2023-03-14
问题内容

java.util.Datevs 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的这一部分。



 类似资料:
  • 本文向大家介绍java.util.Date与java.sql.Date的区别,包括了java.util.Date与java.sql.Date的区别的使用技巧和注意事项,需要的朋友参考一下 我数据库里用到了日期类型。用java编程的时候同时import了java.util.*和java.sql.*,发现直接申明Date类型 Date dt; 会报错,查了一下才发现有java.util.Date和ja

  • 问题内容: 我有一个广泛的DATE-TIME转换类,但是遇到一种无法解决的情况: 我有一个java.util.date:星期二5月10日00:00:00 BST 2011 我有一个java.sql.time:03:58:44 我需要创建一个java.util.date:2011年5月10日星期二03:58:44 BST 我想到的唯一方法是: 完全不推荐使用的代码,并且不起作用:java.sql.T

  • 问题内容: 我在Java中遇到以下问题(我看到有些人在JavaScript中也遇到了类似的问题,但我正在使用Java) 退货 我不知道我认为应该是2012年的112位。这是怎么回事?该 课程不可用吗?我将其作为字段存储在我的几个班级中,以存储日期和时间。我该怎么办? 问题答案: 根据javadocs: 不推荐使用 。从JDK 1.1版开始,由取代。 返回一个值,该值是从包含或由此日期对象表示的时间

  • 问题内容: 我在Jasper Reports中创建了一个报告,该报告仅识别java.util.Date(不是Calendar或Gregorian等)。 有没有办法在当前日期之前7天创建日期? 理想情况下,它看起来像这样: 更新:我对此不够强调:JasperReports无法识别Java Calendar对象。 问题答案: 从现在开始: 从任意: 编辑:如其他答案所指出,如果这是一个因素,则不考虑夏

  • 问题内容: 在保留时间戳的同时将java.sql.Date对象转换为java.util.Date的最简单方法是什么? 我试过了: 没有运气。它仍然只将日期部分存储到变量中。 问题答案: java.sql.Date类设计为仅包含日期而没有时间,因此您看到的转换结果对该类型是正确的。您需要使用java.sql.Timestamp来获取带时间的完整日期。

  • 问题内容: 我得到一个在一个表上(重复键)违反唯一性约束。本质上,我的表如下所示: 唯一性约束在上;也就是说,没有2条记录可以具有相同的日期/时间“时间戳”。 在将记录插入该表如下所示: 因此,您可以看到我正在使用(“现在”)并将其转换为实例。 我看到的确切错误(重复键)一直抱怨我试图将其插入表中,但该错误已经存在。因此,很明显,我使用了错误的Date API,并且插入了具有无效时间成分的日期,从