Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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代码中返回ORA-00904的日期格式,但在sql developer中不返回_Java_Sql_Oracle_Oracle Sqldeveloper - Fatal编程技术网

在java代码中返回ORA-00904的日期格式,但在sql developer中不返回

在java代码中返回ORA-00904的日期格式,但在sql developer中不返回,java,sql,oracle,oracle-sqldeveloper,Java,Sql,Oracle,Oracle Sqldeveloper,我正在使用SpringJDBCTemplate查询我的数据 我的代码中有以下查询 static final String SQL = SELECT msgs.msg_submit_date MSG_DATE FROM {0}.messages msgs WHERE TRUNC(msgs.msg_submit_date) BETWEEN TO_DATE(:startDate,'YYYY-MM-DD') AND TO_DATE(:endDate,'YYYY-MM-DD') ; String

我正在使用SpringJDBCTemplate查询我的数据


我的代码中有以下查询

static final String SQL = SELECT msgs.msg_submit_date MSG_DATE FROM {0}.messages msgs 
WHERE TRUNC(msgs.msg_submit_date) 
BETWEEN TO_DATE(:startDate,'YYYY-MM-DD') AND TO_DATE(:endDate,'YYYY-MM-DD') ;

String formattedSQL = MessageFormat.format(SQL , new Object[] "sms.schema"});
当我运行它时,我得到一个
ORA-00904:“DD”:无效标识符
错误。我假设这是因为
msg\u submit\u date
列有与其关联的
HH:MI:SS
,但是,我不想将
HH:MI:SS
放在java代码中。有年、月、日就足够了

另外,当我在我的Oracle SQL Developer IDE中运行相同的查询时,它运行良好,没有任何错误,因此不确定发生了什么错误


使用以下格式通过
java.time.LocalDate
生成日期:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/d/yyyy");
返回以下字符串格式
2018-06-03

jdbc调用:

jdbcTemplate.query(formattedSQL, params, new MessagesRowMapper())


我认为这可能是由于
MessageFormat

的原因,您可以将查询编写为:

SELECT msg_submit_date
FROM messages
WHERE submit_date >= DATE '2018-06-03' AND
      submit_date < DATE '2018-06-13';

您可以将查询编写为:

SELECT msg_submit_date
FROM messages
WHERE submit_date >= DATE '2018-06-03' AND
      submit_date < DATE '2018-06-13';

错误是因为执行查询时没有单引号;您可以通过以下方式获得相同的结果:

SELECT msgs.msg_submit_date MSG_DATE FROM messages msgs
WHERE TRUNC(msgs.msg_submit_date)
BETWEEN TO_DATE(:startDate,YYYY-MM-DD) AND TO_DATE(:endDate,YYYY-MM-DD);

ERROR at line 3:
ORA-00904: "DD": invalid identifier
日期格式组件被视为标识符,而不是字符串的一部分


您需要弄清楚为什么会发生这种情况——最可能的解释是,尽管您在问题中发布了什么,但Java代码中的静态字符串中没有这些内容,但它们可能会被稍后的转换(例如,
MessageFormat.format())去掉
调用。

错误是因为执行查询时没有单引号;您可以通过以下方式获得相同的结果:

SELECT msgs.msg_submit_date MSG_DATE FROM messages msgs
WHERE TRUNC(msgs.msg_submit_date)
BETWEEN TO_DATE(:startDate,YYYY-MM-DD) AND TO_DATE(:endDate,YYYY-MM-DD);

ERROR at line 3:
ORA-00904: "DD": invalid identifier
日期格式组件被视为标识符,而不是字符串的一部分


您需要弄清楚为什么会发生这种情况——最可能的解释是,尽管您在问题中发布了内容,但Java代码中的静态字符串中并没有它们,但它们可能会被稍后的转换(例如,
MessageFormat.format()
调用)去除。

显示您的Java代码。你的问题-不要在评论中发布代码或其他信息。@a_horse_,没有名字,我已经编辑了,单引号正在丢失;这就是它的真实外观,还是整个字符串都用双引号括起来?需要吗?(还有,为什么模式()的
不匹配
到日期()
模式;为什么传递字符串而不是直接绑定日期?Spring不允许吗?)那么
格式化SQL呢?如何传递这些值?行映射器的代码在哪里?向我们展示您的Java代码。你的问题-不要在评论中发布代码或其他信息。@a_horse_,没有名字,我已经编辑了,单引号正在丢失;这就是它的真实外观,还是整个字符串都用双引号括起来?需要吗?(还有,为什么模式()的
不匹配
到日期()
模式;为什么传递字符串而不是直接绑定日期?Spring不允许吗?)那么
格式化SQL呢?如何传递这些值?行映射器的代码在哪里。这是因为MessageFormat去掉了单引号。不知道为什么会这样,泰。这是因为MessageFormat去掉了单引号。不知道为什么会这样。