我需要同时支持 Oracle 和 SQL Server。我在两个数据库中都命名get_current_date
了完全相同的程序。现在我有一个查询:
SELECT col1, col2 FROM table WHERE colDate < get_current_date()
这在 Oracle 中运行良好,但dbo.
在 SQL Server 中执行时缺少前缀。
Spring应该能够处理吗?我还有什么其他选择?我认为没有必要自己确定数据库类型。
谢谢!
我需要同时支持 Oracle 和 SQL Server。我在两个数据库中都命名get_current_date
了完全相同的程序。现在我有一个查询:
SELECT col1, col2 FROM table WHERE colDate < get_current_date()
这在 Oracle 中运行良好,但dbo.
在 SQL Server 中执行时缺少前缀。
Spring应该能够处理吗?我还有什么其他选择?我认为没有必要自己确定数据库类型。
谢谢!
每个 JDBC 驱动程序都应该支持 JDBC 函数转义(在第 13.4.1 节中定义并在JDBC 4.1 规范的附录 D 中列出)。对于CURRENT_DATE
它是CURRENT_DATE
或CURRENT_DATE()
。
您可以在查询中将其称为
SELECT col1, col2 FROM table WHERE colDate < {fn CURRENT_DATE}
您可以查询特定驱动程序支持的功能列表DatabaseMetaData.getTimeDateFunctions()
顺便说一句:这假设您只需要数据库的当前日期。这不是在查询中调用用户定义函数的通用解决方案。
Spring应该能够处理吗?
-->get_current_date()
是数据库方法/过程(可能是数据库或您的自定义),因此它依赖于数据库,Spring 不会处理这个问题。
我还有什么其他选择?
--> 好吧,您可以将当前日期放在代码中的查询中,这样它将独立于您使用的数据库。就像是 :
String sql = "SELECT col1, col2 FROM table WHERE colDate < " + new Date();
如何在 java 中获取当前日期,例如:
Calendar cal = Calendar.getInstance();
currentDate = cal.getTime();
and then you do:
SELECT col1, col2 FROM table WHERE colDate < currentDate