Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同RDBMS上的NamedParameterJDBCTemplate和函数语法_Java_Sql Server_Spring_Jdbc - Fatal编程技术网

Java 不同RDBMS上的NamedParameterJDBCTemplate和函数语法

Java 不同RDBMS上的NamedParameterJDBCTemplate和函数语法,java,sql-server,spring,jdbc,Java,Sql Server,Spring,Jdbc,我需要同时支持Oracle和SQL Server。我在两个数据库中都有相当相同的程序,名为get\u current\u date。现在我有一个问题: SELECT col1, col2 FROM table WHERE colDate < get_current_date() 从colDateget\u current\u date()是数据库方法/过程(可能是数据库或您的自定义),因此它依赖于数据库,Spring不会处理这个问题 我还有其他选择吗 -->你们可以在代码中把当前日期放在

我需要同时支持Oracle和SQL Server。我在两个数据库中都有相当相同的程序,名为
get\u current\u date
。现在我有一个问题:

SELECT col1, col2 FROM table WHERE colDate < get_current_date()
从colDate
这在Oracle中运行良好,但在SQL Server中执行时缺少
dbo.
前缀

Spring应该能够处理这个问题吗?我还有其他选择吗?我认为没有必要自己确定DB类型

谢谢大家!

Spring应该能够处理这个问题吗

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

我还有其他选择吗

-->你们可以在代码中把当前日期放在查询中,这样它就和你们使用的数据库无关了。比如:

String sql = "SELECT col1, col2 FROM table WHERE colDate < " + new Date();
String sql=“从colDate<”+new Date()所在的表中选择col1、col2;
Spring应该能够处理这个问题吗

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

我还有其他选择吗

-->你们可以在代码中把当前日期放在查询中,这样它就和你们使用的数据库无关了。比如:

String sql = "SELECT col1, col2 FROM table WHERE colDate < " + new Date();
String sql=“从colDate<”+new Date()所在的表中选择col1、col2;

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

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

and then you do:

SELECT col1, col2 FROM table WHERE colDate < currentDate
Calendar cal=Calendar.getInstance();
currentDate=cal.getTime();
然后你会:
从colDate
如何用java获取当前日期,例如:

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

and then you do:

SELECT col1, col2 FROM table WHERE colDate < currentDate
Calendar cal=Calendar.getInstance();
currentDate=cal.getTime();
然后你会:
从colDate
每个JDBC驱动程序都应支持JDBC函数转义(定义见第13.4.1节,并在附录D中列出)。对于
当前日期
,它是
当前日期
当前日期()

您可以在查询中按以下方式调用它:

SELECT col1, col2 FROM table WHERE colDate < {fn CURRENT_DATE}
从colDate<{fn CURRENT_DATE}所在的表中选择col1、col2
您可以使用查询特定驱动程序支持的功能列表


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

每个JDBC驱动程序都应该支持JDBC函数转义(定义见第13.4.1节,并在附录D中列出)。对于
当前日期
,它是
当前日期
当前日期()

您可以在查询中按以下方式调用它:

SELECT col1, col2 FROM table WHERE colDate < {fn CURRENT_DATE}
从colDate<{fn CURRENT_DATE}所在的表中选择col1、col2
您可以使用查询特定驱动程序支持的功能列表


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

获取当前日期
是我自己在两个数据库中的过程,它充当系统特定函数的包装器。我不能把日期放在我发出查询的地方,因为我们已经选择了DBMS来提供日期服务。(数据库和应用程序在不同的机器上运行,我们不想冒时间设置差异造成问题的风险。)
get_current_date
是我自己在这两个数据库中的过程,作为系统特定功能的包装。我不能把日期放在我发出查询的地方,因为我们已经选择了DBMS来提供日期服务。(数据库和应用程序在不同的机器上运行,我们不想冒时间设置差异造成问题的风险。)正如我在上面所写的:我不能在Java中输入触发查询的日期,因为我们选择DBMS作为当前时间戳的唯一源。如果不可能的话,我们可能不得不重新考虑这个问题。正如我在上面所写的:我不能在Java中输入启动查询的日期,因为我们已经选择DBMS作为当前时间戳的唯一来源。如果这不可能,我们可能不得不重新考虑。太棒了!我知道这样的事情会存在。谢谢这也适用于自定义过程吗?不,函数转义是通用数据库函数之上的一个抽象层,这些数据库函数偶尔(稍微)有不同的实现。JDBC驱动程序应该只实现规范附录D中列出的函数。它不是调用用户定义函数的解决方案(我在回答中也添加了这一点)。这完全有效。再次感谢。但我仍然需要一个定制程序的想法。如果你能提供一个,我可以接受这个帖子作为完美的答案。太棒了!我知道这样的事情会存在。谢谢这也适用于自定义过程吗?不,函数转义是通用数据库函数之上的一个抽象层,这些数据库函数偶尔(稍微)有不同的实现。JDBC驱动程序应该只实现规范附录D中列出的函数。它不是调用用户定义函数的解决方案(我在回答中也添加了这一点)。这完全有效。再次感谢。但我仍然需要一个定制程序的想法。如果你能提供一个,我可以接受这个职位作为完美的答案。