【问题标题】:JDO Exception: "Query requires 1 parameters, yet 2 values have been provided."JDO 异常:“查询需要 1 个参数,但已提供 2 个值。”
【发布时间】:2011-04-14 02:55:35
【问题描述】:

尽管我的 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 但没有解释。

【问题讨论】:

    标签: java google-app-engine parameters jdo


    【解决方案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:参数 - 以逗号分隔的参数列表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 2019-12-10
        相关资源
        最近更新 更多