2010-10-05 46 views
2

我有一條SQL語句可用於從我的Android sqlite3數據庫返回不同的行,我想通過ContentProvider的查詢來傳遞它。如何將sqlite3關鍵字DISTINCT注入到Android ContentProvider的查詢中?

例如:

select lastName from peopleTable where upper(lastName) like upper("%smith%"); 

必須

select DISTINCT lastName from peopleTable where upper(lastName) like upper("%smith%"); 

有沒有乾淨的方式來傳遞額外的關鍵字select語句?

+0

你正在實現'ContentProvider'嗎?你在查詢「ContentProvider」嗎?換句話說,ContentProvider實現中是否有DISTINCT關鍵字,或者您是否想將其傳遞給現有的ContentProvider或其他內容? – CommonsWare 2010-10-05 21:58:44

+0

如果您正在訪問現有的ContentProvider,則可以修改的唯一直接SQL是選擇字符串(where子句)和按語句排序。你最好的辦法是看看這個內容提供者是否有一個給你一個DISTINCT數據集的URI。我想如果你知道底層的表結構,你也可以嘗試在where子句中找一個子查詢來給你一個獨特的數據集。我不會推薦它,但是作爲ContentProvider的所有者可以自由修改表/字段名稱並使您的子查詢無用。 – 2010-10-06 00:37:35

+0

我有ContentProvider,但我想把它看作是一個通用的CP(即其他所有者)。我最終做的是創建一個提供DISTINCT效果的GROUP BY子句。然後我將它編碼到ORDER BY子句(sortOrder)中。然後在CP內部解析出來並將其發佈到DB查詢的GROUP BY參數中。我可能應該繞過CP並直接發出DB查詢。無論哪種方式,我都在欺騙我的初衷。 – mobibob 2010-10-06 03:45:31

回答

2

這不是我所說的「好主意」,但取決於CP,您可以修改投影,使投影中的第一項是「DISTINCT Column」而不是「Column」。只要ContentProvider由數據庫支持並且不對您的投影進行任何修改,這似乎仍然有效。但我會重複一遍,這可能不是最好的面向未來的想法,因爲這個「特性」沒有文檔記錄,更多的是如何將查詢與SQLiteDatabase類放在一起。如果你知道ContentProvider是如何構建的,那麼你可以預先說明這是否可行。

+0

很聰明!我喜歡它,但我不認爲我會使用它。正如你承認的那樣,這不是面向未來的。 – mobibob 2011-05-08 03:32:15

相關問題