Java 代码中的数据库查询

Java 代码中的数据库查询,java,sql,oracle,Java,Sql,Oracle,我在代码中使用sysdate查询来获取过去3小时内最后更新的行,这应该是可配置的。数据库在GMT时区运行,应用程序在PST时区运行。查询如下所示 select * from <table> where updated_Date < sysdate - numdtodsinterval(3,'hour') 从与数据库具有不同时区的应用程序中触发此类查询的建议/最佳做法是什么。使用jdbc按原样触发查询 Sysdate是在服务器上解释的,所以您应该不会有问题。它将返回过去3小时

我在代码中使用sysdate查询来获取过去3小时内最后更新的行,这应该是可配置的。数据库在GMT时区运行,应用程序在PST时区运行。查询如下所示

select * from <table> where updated_Date  < sysdate - numdtodsinterval(3,'hour')

从与数据库具有不同时区的应用程序中触发此类查询的建议/最佳做法是什么。

使用jdbc按原样触发查询


Sysdate是在服务器上解释的,所以您应该不会有问题。它将返回过去3小时的更新,而不考虑客户端时区。如果您也使用sysdate保存了更新的_日期,那就是

我不得不说,对于覆盖很多时区的应用程序,最好的做法是停止使用日期数据类型,开始使用带有时区数据类型的时间戳

我不是说这很容易,只是说,出于几个原因,这可能是最好的做法

主要是它消除了任何和所有的歧义。如果使用DATE,没有人知道该值是基于什么计算的。你知道的。也许你对理想专栏有意见,但可能被忽略了。如果它是一个带有时区数据类型的时间戳,那么您已经锁定了一个与本地时钟无关的特定时间点


但这假设您可以更改数据库模式,而您可能无法更改。因此,这将为您的下一个日期列提供警告。

这取决于您最初是如何生成更新日期的!阿菲说的。加上更新日期的数据类型。即使列的名称中有_date,但并不意味着date是它的数据类型。-只是说in'还取决于oracle的版本。