尽管我的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,但没有解释。
答案 0 :(得分:6)
JDO API似乎要求一次设置所有参数。该方法称为declareParameters
,它似乎是“setter”,而不是“adder”。方法名称可能会产生误导,文档不是很好,但它似乎就是这样。
这与支持setter和adder的“扩展程序”不同:addExtension()
,setExtensions()
。
答案 1 :(得分:2)
很明显第二次调用declareParameters会替换第一次调用中声明的参数。第二个示例中显示了声明多个参数的正确方法。
答案 2 :(得分:1)
从官方文件中解释: link here
void declareParameters(java.lang.String parameters)
此方法的String参数遵循Java语言中形式参数的语法。