JDO 异常:“查询需要 1 个参数,但已提供 2 个值。”
Posted
技术标签:
【中文标题】JDO 异常:“查询需要 1 个参数,但已提供 2 个值。”【英文标题】:JDO Exception: "Query requires 1 parameters, yet 2 values have been provided." 【发布时间】:2011-04-14 02:55:35 【问题描述】:尽管我的 JDO 查询包含 两个 declareParameters
语句,但下面的代码会产生一个错误,声称只接受一个参数:
查询需要 1 个参数,但已提供 2 个值。
这两个参数分别是amountP
和taxP
:
javax.jdo.Query query= pm.newQuery(Main.class);
query.setFilter("amount == amountP && tax < taxP");
query.declareParameters("int amountP");
query.declareParameters("int taxP");
List<Main> results = (List<Main>)query.execute (amountP, taxP);
但是,通过以下更改,它可以工作。
javax.jdo.Query query= pm.newQuery(Main.class);
query.setFilter("amount == amountP && tax < taxP");
query.declareParameters("int amountP, int taxP");
List<Main> results = (List<Main>)query.execute (amountP, taxP);
我的问题是:原来的语法有什么问题?
更新:This problem has been reported by others 但没有解释。
【问题讨论】:
【参考方案1】:JDO API 似乎要求一次设置所有参数。该方法称为declareParameters
,它似乎是“setter”,而不是“adder”。方法名称可能会产生误导,文档也不是很好,但它似乎就是这样。
这与同时支持 setter 和 adder 的“扩展”不同:addExtension()
、setExtensions()
。
【讨论】:
【参考方案2】:很明显,第二次调用 declareParameters 替换了第一次调用中声明的参数。第二个示例显示了声明多个参数的正确方法。
【讨论】:
+1 由于这种行为似乎暗示您的陈述是正确的。也许投反对票的人想解释他/她投反对票的原因?【参考方案3】:取自官方文档的解释: link here
void declareParameters(java.lang.String parameters)
声明参数查询执行列表。参数
声明是一个包含一个或多个查询参数的字符串
声明用逗号分隔。中命名的每个参数
查询时参数声明必须绑定一个值
执行。
此方法的 String 参数遵循 Java 语言中形式参数的语法。
Parameters:参数 - 以逗号分隔的参数列表。【讨论】:
以上是关于JDO 异常:“查询需要 1 个参数,但已提供 2 个值。”的主要内容,如果未能解决你的问题,请参考以下文章