2010-09-18 34 views
5

Mặc dù thực tế rằng truy vấn JDO của tôi chứa HAIdeclareParameters báo cáo, mã dưới đây tạo ra một lỗi khi xác nhận chỉ có một tham số được chấp nhận:Ngoại lệ JDO: "Truy vấn yêu cầu 1 thông số, nhưng 2 giá trị đã được cung cấp".

Query đòi hỏi 1 thông số, tuy nhiên 2 giá trị đã được cung cấp.

Hai thông số 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); 

Tuy nhiên, với những thay đổi sau, nó hoạt động.

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); 

Câu hỏi của tôi là: Có chuyện gì với cú pháp ban đầu?

Cập nhật: This problem has been reported by others nhưng không giải thích.

Trả lời

6

JDO API dường như yêu cầu tất cả thông số được đặt cùng một lúc. Phương pháp này được gọi là declareParameters, có vẻ như là "setter", chứ không phải là "adder". Tên phương pháp có thể gây hiểu nhầm và tài liệu không phải là tuyệt vời, nhưng dường như nó chỉ là cách thức của nó.

Điều này khác với "tiện ích mở rộng" mà cả hai đều hỗ trợ trình thiết lập và trình bổ sung: addExtension(), setExtensions().

2

Có vẻ như khá rõ ràng rằng lệnh gọi thứ hai để declareParameters thay thế tham số được khai báo trong cuộc gọi đầu tiên. Cách chính xác để khai báo nhiều hơn một tham số được hiển thị trong ví dụ thứ hai của bạn.

+1

+1 Vì hành vi dường như ngụ ý rằng tuyên bố của bạn là chính xác. Có lẽ downvoter muốn giải thích lý do tại sao anh/cô ấy downvoted? – jmort253

1

Lời giải thích được lấy từ các tài liệu chính thức: link here

void declareParameters(java.lang.String parameters) 
  • Khai báo danh sách thực hiện tham số truy vấn. Khai báo tham số là một Chuỗi chứa một hoặc nhiều thông số truy vấn các khai báo được phân tách bằng dấu phẩy. Mỗi tham số có tên trong khai báo tham số phải được ràng buộc với giá trị khi truy vấn được thực thi .

Tham số chuỗi cho phương thức này tuân theo cú pháp cho các tham số chính thức trong ngôn ngữ Java.

  • Tham số: thông số - danh sách các thông số cách nhau bởi dấu phẩy.
Các vấn đề liên quan