2

我需要同时支持 Oracle 和 SQL Server。我在两个数据库中都命名get_current_date了完全相同的程序。现在我有一个查询:

SELECT col1, col2 FROM table WHERE colDate < get_current_date()

这在 Oracle 中运行良好,但dbo.在 SQL Server 中执行时缺少前缀。

Spring应该能够处理吗?我还有什么其他选择?我认为没有必要自己确定数据库类型。

谢谢!

4

3 回答 3

3

每个 JDBC 驱动程序都应该支持 JDBC 函数转义(在第 13.4.1 节中定义并在JDBC 4.1 规范的附录 D 中列出)。对于CURRENT_DATE它是CURRENT_DATECURRENT_DATE()

您可以在查询中将其称为

SELECT col1, col2 FROM table WHERE colDate < {fn CURRENT_DATE}

您可以查询特定驱动程序支持的功能列表DatabaseMetaData.getTimeDateFunctions()

顺便说一句:这假设您只需要数据库的当前日期。这不是在查询中调用用户定义函数的通用解决方案。

于 2012-12-20T15:19:04.200 回答
1

Spring应该能够处理吗?

-->get_current_date()是数据库方法/过程(可能是数据库或您的自定义),因此它依赖于数据库,Spring 不会处理这个问题。

我还有什么其他选择?

--> 好吧,您可以将当前日期放在代码中的查询中,这样它将独立于您使用的数据库。就像是 :

String sql = "SELECT col1, col2 FROM table WHERE colDate < " + new Date();
于 2012-12-20T14:54:08.717 回答
0

如何在 java 中获取当前日期,例如:

Calendar cal = Calendar.getInstance();
currentDate = cal.getTime();

and then you do:

SELECT col1, col2 FROM table WHERE colDate < currentDate
于 2012-12-20T15:05:48.853 回答