2010-09-21 50 views
1

我正在使用Google App Engine作爲項目,我需要對數據庫執行一些查詢。我使用JDOQL來詢問數據庫。在我的情況下,我想獲得包含子串「數組」的大學。我想我的查詢有一個錯誤,因爲它按字母順序返回大學的名稱,而不是包含子字符串的名稱。JDOQL與「包含」請求獲取結果的問題

Query query = pm.newQuery("SELECT FROM " + University.class.getName() + " WHERE name.contains("+array+") ORDER BY name RANGE 0, 5"); 

有人能告訴我在我的查詢中出了什麼問題嗎?

謝謝你的幫助!

編輯

我大學店的名單,我有一個suggestbox,我們可以要求他的名字的大學。我想自動完成請求的名稱。

回答

1

App Engine不支持全文本搜索,你應該問題217。但是,部分解決方法是可能的。在你的情況下,我認爲這是一個很好的選擇。

首先,調整您的模型,使其名稱的較低(或大寫)版本 - 我將假定它被稱爲lname。除非你想讓你的查詢區分大小寫。

然後你這樣的查詢:

Query query = pm.newQuery(University.class); 
query.setFilter("lname >= startNameParam"); 
query.setFilter("lname < stopNameParam"); 
query.setOrdering("lname asc"); 
query.declareParameters("String startNameParam"); 
query.declareParameters("String stopNameParam"); 
query.setRange(0, 5); 
List<University> results = (List<University>) query.execute(search_value, search_value + "z"); 
0

正確的方法做,這是這樣的 -

Query query = pm.newQuery(University.class,":p.contains(name)"); 
query.setOrdering("name asc"); 
query.setRange(0, 5); 
List univs = q.execute(Arrays.asList(array)); 

(注意:在這種情況下,:pimplicit param名稱,你可以用任何名稱取代)

+0

你可以使用任何隨機名稱如更換「:邁克爾」。如果查詢中只有一個參數,則不需要聲明該參數,並且您的「數組」將被視爲代替該參數。請參閱我在答案中提供的鏈接中的「隱式參數」。 – Gopi 2010-09-21 07:54:43

+0

如果array是大學名稱的子字符串,則不起作用。例如,如果array ='Harv',它將不會返回任何內容,但是如果數組完全等於存儲在數據庫中的大學的名稱,它將起作用。如果array ='哈佛大學'它的作品... – 2010-09-21 08:18:10

+0

是的。我不認爲有什麼方法在應用程序引擎中搜索子字符串或類似於SQL中的'LIKE'。 – Gopi 2010-09-21 09:25:40