我有一个奇怪的现象:为什么我不能将java.util.Date与mysql日期进行比较?
我使用JPA /休眠从MySQL数据库表,其中一个日期列是大于或等于我发送的日期得到行(去掉了不相关的代码):
SELECT sp.* FROM spaceproduct sp where sp.enddate is null or sp.enddate >= :endDate)
在我的代码我基本上做到:
q.setParameter("endDate", new java.util.Date());
现在,我的问题是,当在DB的日期是同一天。即“今天”,它不会被拾起。我认为这是因为它不知何故也将java.util.date的时间部分与数据库中的内容进行比较(db值仅为“2011-10-28”,但java.util Date为2011-10-28T13:36 :43.130 + 0200)
不过,如果我更改日期参数i设置成java.sql.Date(),它的工作原理
。现在,因为我的MySQL数据库列是一个日期,而不是!一个日期时间,这是一个错误?即使我发送一个java.util.date,不应该只比较日期部分,因为我的数据库列是日期吗?
编辑:我试过使用util日期并将其转换为一个sql日期,但实际上并不起作用:
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
q.setParameter("endDate", sqlDate);
因此,从我所看到的,我有的部分时间设置为0,也为SQL的日期,除非我用的是过时“年 - 月 - 日”构造...
不,这不是一个错误。 2011-10-28不是> = 2011-10-28T13:36:43.130 + 0200。你的日期对象有2011-10-28T13:36:43.130 + 0200,因此失败。然而,java.sql.Date只存储日/月/年,或者只是在你调用toString()时返回,所以它等于2011-10-28。 – Thor84no
嘿,感谢您的输入。看到我上面的编辑评论,并说出你认为队友 – Mathias