2010-09-18 62 views
5

儘管我的JDO查詢包含declareParameters陳述的事實,下面代碼產生一個錯誤,聲稱只有一個參數被接受JDO異常:「查詢需要1個參數,但已提供2個值。」

查詢需要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但沒有解釋。

回答

6

JDO API似乎要求所有參數一次設置。該方法被稱爲declareParameters,這似乎是一個「二傳手」,而不是「加法器」。方法名稱可能會引起誤解,並且文檔不是很好,但它似乎只是它的方式。

這與支持setter和加法器的「擴展」不同:addExtension(),setExtensions()

2

看起來很明顯,第二次調用declareParameters替換了第一次調用中聲明的參數。第二個示例中顯示了聲明多個參數的正確方法。

+1

+1由於行爲似乎暗示您的陳述是正確的。也許這個downvoter想解釋他/她爲什麼downvoted? – jmort253 2012-01-24 19:27:58

1

從官方文件所採取的解釋: link here

void declareParameters(java.lang.String parameters) 
  • 聲明參數查詢執行名單。聲明參數 是一個包含一個或多個查詢參數 用逗號分隔的聲明的字符串。在執行查詢 時,參數聲明中指定的每個參數必須綁定到一個值。

此方法的String參數遵循Java語言中形式參數的語法。

  • 參數:參數 - 用逗號分隔參數列表。
相關問題