【问题标题】:Parameter index out of range (1 > number of parameters, which is 0). Mysql vs Java参数索引超出范围(1 > 参数个数,即 0)。 Mysql 与 Java
【发布时间】:2016-01-19 22:15:49
【问题描述】:

在 mysql 中运行以下查询时,它工作得非常好。

SELECT
     a.feed_date, a.partner_name,
     SUM(a.count) as InputCount,
     SUM(CASE when (b.count is null) then 0 else b.count end) as OutputCount
FROM
 (SELECT year,week,partner_name, feed_date, count
  FROM op_dev.op_stats
  WHERE partner_name IN ('xyz, INC.','abc')
     AND mkt_elig_cd='Y'
     AND rel_grp_type_no='00000'
     AND feed_type='SellerChar') AS A
 LEFT OUTER JOIN
  (SELECT year,week,feed_date, partner_name, count
   FROM opt_dev.op_stats
   WHERE partner_name IN ('xyz, INC.','abc')
     AND mkt_elig_cd='Y'
     AND rel_grp_type_no='00000'
     AND feed_type='MSF') AS B
 ON A.partner_name = B.partner_name
   AND A.year=B.year
   AND A.week=B.week
GROUP BY A.week,A.year;

但是,当我使用相同的查询字符串并通过 Java 代码调用它时,会出现以下错误:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). 

谁能帮我指出导致此问题的原因。

【问题讨论】:

  • 好吧,那个 SQL 是无法阅读的。请重新格式化。 --- SQL是如何执行的?该错误可能与此有关,因此您需要显示它。
  • 感谢 Nguyen 提供的格式。我通过准备好的语句使用 sql,将上述字符串作为查询传递。
  • 请包含您用来执行此操作的 Java 代码,以及整个堆栈跟踪,而不仅仅是错误消息。

标签: java mysql hibernate


【解决方案1】:

看起来您尝试执行查询并指定参数(检查 java 和 hibernate),但查询没有参数。

【讨论】:

  • 是的,这就是问题所在。谢谢。
【解决方案2】:

GROUP BY 子句必须包含选定的列。如果未选择任何列,则 GROUP BY 子句可以使用任何列。 你可以试试这个:

SELECT partner_name, feed_date,
     SUM(CASE WHEN feed_type='SellerChar' THEN count ELSE 0 END) OVER(PARTITION BY year,week,feed_type) AS InputCount,
     SUM(CASE WHEN feed_type='MSF' THEN count ELSE 0 END) OVER(PARTITION BY year,week,feed_type) AS OutputCount
FROM op_dev.op_stats
WHERE partner_name IN ('xyz, INC.','abc')
     AND mkt_elig_cd='Y'
     AND rel_grp_type_no='00000'
     AND (feed_type='SellerChar' OR feed_type='MSF')

【讨论】:

  • 我已经删除了该组,但仍然显示相同的问题。
猜你喜欢
  • 1970-01-01
  • 2017-05-21
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多