2009-11-06 132 views
0

我有一个EJB 2.1实体bean,用于查询Oracle表中的“出生日期”列。数据库中的列是DATE类型的。查询的工作原理没有问题,除了一个特定的日期:01年5月1日。使用Java/EJB 2.x按日期查询记录(1916年5月1日)

这与夏时制有关。 Oracle存储日期为:5/1/1916 1:00:00 AM,而所有其他日期的时间设置为12:00:00 AM(例如,1/7/1971 12:00:00 AM)。

在生产/接受系统上,1916年1月的查询(使用EJB-QL!)将返回任何结果。奇怪的是,它在我的开发/测试系统上工作。我检查了各种系统上的数据库设置,发现DBTIMEZONE参数在开发/测试框中设置为+00:00,在生产/接受框中设置为+02:00。但是,将时区更改为+02:00不会产生任何差异。

什么可能导致此行为?如何搜索这个出生日期?

回答

1

只是一个疯狂的猜测:你在比利时,日期写错了数据库,以便以后改变时区设置,查询时不会有什么区别?

在比利时和其他几个欧洲国家,DST于1916年5月1日推出,从上午12点跳到上午1点,因此5月1日上午12:00确实不存在。如果数据库由Java软件填充,我会假设Java程序已经将1AM写入数据库。如果您跳过Java组件并使用SQL客户端向列中插入和查询“无时间”值,那么会发生什么? to_date('1916-05-01','YYYY-MM-DD')?

+0

直接用SQL客户端查询就像一个魅力。由于to_date('1916-05-01','YYYY-MM-DD')忽略时间分量。但是,如何使用EJB 2.x QL从Java执行此操作并不清楚。 – 2009-12-02 11:16:55

相关问题