JDO异常:“查询需要1个参数,但已提供2个值。”

时间:2010-09-18 15:22:13

标签: java google-app-engine parameters jdo

尽管我的JDO查询包含两个 declareParameters语句,但下面的代码会产生错误,声明只接受一个参数

查询需要1个参数,但已提供2个值。

这两个参数是amountPtaxP

 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,但没有解释。

3 个答案:

答案 0 :(得分:6)

JDO API似乎要求一次设置所有参数。该方法称为declareParameters,它似乎是“setter”,而不是“adder”。方法名称可能会产生误导,文档不是很好,但它似乎就是这样。

这与支持setter和adder的“扩展程序”不同:addExtension()setExtensions()

答案 1 :(得分:2)

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

答案 2 :(得分:1)

从官方文件中解释: link here

void declareParameters(java.lang.String parameters)
  • 声明参数列表查询执行。参数 declaration是一个包含一个或多个查询参数的String 用逗号分隔的声明。每个参数都在。中命名 参数声明必须在查询时绑定到值 执行。

此方法的String参数遵循Java语言中形式参数的语法。

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