Java JDO例外情况:";查询需要1个参数,但提供了2个值。”;

Java JDO例外情况:";查询需要1个参数,但提供了2个值。”;,java,google-app-engine,parameters,jdo,Java,Google App Engine,Parameters,Jdo,尽管我的JDO查询包含两个declareParameters语句,但下面的代码生成一个错误,声称只接受一个参数: 查询需要1个参数,但提供了2个值 这两个参数是amountP和taxP: javax.jdo.Query query= pm.newQuery(Main.class); query.setFilter("amount == amountP && tax < taxP"); query.declareParameters("int amountP");

尽管我的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);
setFilter(“amount==amountP&&tax
但是,通过以下更改,它可以正常工作。

 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); 
javax.jdo.Query Query=pm.newQuery(Main.class);
setFilter(“amount==amountP&&tax
我的问题是:原始语法有什么问题?


更新:但没有解释。

很明显,对declareParameters的第二次调用替换了第一次调用中声明的参数。第二个示例中显示了声明多个参数的正确方法。

似乎要求同时设置所有参数。该方法称为
declareParameters
,它似乎是一个“setter”,而不是一个“adder”。方法名称可能有误导性,文档也不是很好,但它似乎就是这样


这与既支持setter又支持adder的“extensions”不同:
addExtension()
setExtensions()
,官方文档中的解释如下:

  • 声明查询执行的参数列表。参数 声明是包含一个或多个查询参数的字符串 用逗号分隔的声明。中指定的每个参数 执行查询时,参数声明必须绑定到值 执行
此方法的字符串参数遵循Java语言中形式参数的语法

  • 参数:参数-以逗号分隔的参数列表

+1因为该行为似乎暗示您的陈述是正确的。也许落选者想解释他/她为什么落选?
void declareParameters(java.lang.String parameters)