2012-06-27 50 views
27

選擇不同的價值我嘗試運行android系統下的原始查詢,似乎不工作android系統源碼

String query ="SELECT DISTINCT category FROM event"; 
Cursor cursor = mDb.rawQuery(query, null); 
if (cursor != null) { 
    cursor.moveToFirst(); 
} 
return cursor; 

,所以我決定使用android系統中查詢()方法,它是像

Cursor mCursor = mDb.query(EVENT_TABLE, new String[] {KEY_ROWID, KEY_CAT}, null, null,null,null, null) 

任何人都可以告訴我如何選擇不同的類別使用查詢()而不是原始查詢請,任何幫助將不勝感激!

+1

你應該避免使用rawQuery'的'只要有可能......總是喜歡通過'rawQuery'建立'SQLiteDatabase'查詢方法。 –

回答

42

您可以使用this方法:

public Cursor query (boolean distinct, String table, 
        String[] columns, String selection, 
        String[] selectionArgs, String groupBy, 
        String having, String orderBy, String limit) 

這裏的第一個參數指定是否要使用不同的或沒有。

+0

那麼如何選擇不同的類別,這是爲了選擇整行? – smith

+2

只在'columns []'中僅傳遞'category',因爲您只需要在行查詢中顯示結果列,並且您將獲得不同的類別。 –

56

但是你必須記得發送參數GROUPBYNOT NULL發送)。

您必須提供distinct的列名稱。

例子:

Cursor cursor = db.query(true, YOUR_TABLE_NAME, new String[] { COLUMN_NAME_1 ,COLUMN_NAME_2, COLUMN_NAME_3 }, null, null, COLUMN_NAME_2, null, null, null); 

真實的 - 不同的TRUE

COLUMN_NAME_2 - 名稱列你有什麼是不同的。

這對我很好。

+6

EPIC WIN!你先生,真棒!我一直在尋找這個問題的小時數,非常感謝您的意見。你真的做了我的一天。 –

+0

謝謝!這是我正在尋找的。特別是與cursorloader一起處理contentprovider。我做了一個小小的黑客,這工作! –

+0

是的,不得不說謝謝。正在尋找並嘗試很多建議,只有你爲我工作。感謝你的分享。保持。 – statosdotcom

6

有多種方式,因爲已經打了綠。但是,如果有人正在通過原始查詢來獲取它,然後在這裏你去:

String query = "SELECT DISTINCT(category) FROM event"; 
3
Cursor res=db.rawQuery("select column1 column2... Distinct column3 from "+Table_name, null); 

column3是一種獨特的列