【问题标题】:org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammarorg.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;糟糕的 SQL 语法
【发布时间】:2020-10-12 10:20:20
【问题描述】:
StringBuilder myquery = new StringBuilder();

  myquery.append("SELECT * from Student stu")
  .append(" WHERE stu.Roll IN ( '120', '140') AND stuv2.Roll is null ")
  .append(" AND date(stu.admission) between ")
  .append("timestamp(").append("?").append(")").append(" AND  CURRENT DATE- 30 DAY");

 final Object[] args = new Object[] {
        getAdm() 
    } ; //its returning '2020-10-01 03:00:00'
    int[] types = new int[] { Types.CHAR  };
    List<Students> result = null;  
    result = jdbcTemplate.query(myquery, args, types, new Mapper());

正在构建不正确的查询,我期望 args 的值来替换“?” :

 SELECT * from Student stu WHERE stu.Roll IN ( '120', '140') AND stuv2.Roll is null 
 AND date(stu.admission) between timestamp(?) AND CURRENT DATE-100 DAY

我收到以下错误:

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610, SQLERRMC=null, DRIVER=4.19.66

nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610, SQLERRMC=null, DRIVER=4.19.66
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:93) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1444) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:632) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:669) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:700) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:706) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:758) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at com.optum.chy.component.DB2Service.selectData(DB2Service.java:278) ~[classes/:na]

【问题讨论】:

  • 你有querymyquery。更正您的代码示例
  • stuv2.Roll,应该是stuv.Roll
  • CURRENT DATE => CURRENT_DATE.

标签: java sql db2 jdbctemplate


【解决方案1】:

查看错误似乎参数未被识别或至少不是日期......

尝试将您的论点转换为日期CAST( "parameter_here" AS DATE)

另外,我宁愿使用 MapSqlParameterSource parameters = new MapSqlParameterSource(); ,但这是不同的主题

编辑之二:jarlh 指出并更正了您查询中的错误,您有一些错别字需要更正。

你可以看看这个帖子,类似的:NamedJdbcParameterTemplate : -418 SQL error with setting Date

【讨论】:

  • 更新了我的答案,我不知道你是否检查了 jarlh 留给你的 cmets
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
相关资源
最近更新 更多