2012-06-27 17 views
27

provo a eseguire la seguente query prima in Android, sembra non funzionareselezionare valore distinto in SQLite Android

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

così decido di usare il metodo query() in Android, che sono qualcosa come

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

qualcuno mi può mostrare come selezionare la categoria distinta per l'utilizzo di query() al posto di rawquery per favore, qualsiasi aiuto sarà molto apprezzato!

+1

Si dovrebbe evitare l'uso di 'rawQuery' quando possibile ... sempre preferisce la costruito nei metodi di query 'SQLiteDatabase' su' rawQuery'. –

risposta

42

È possibile utilizzare il metodo this:

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

Qui primo argomento specifica se utilizzare o meno distinte.

+0

così come selezionare la categoria distinta, cioè per selezionare l'intera riga giusto? – smith

+2

Passa solo 'category' in' columns [] ', come hai appena bisogno di quella colonna nel risultato, come mostrato nella tua query di riga, e otterrai categorie distinte. –

56

MA DEVI ricordare di inviare argomenti in GROUPBY (NOT NULL inviare).

È necessario fornire il nome della colonna per distinct.

Esempio:

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

vero - distinta TRUE

COLUMN_NAME_2 - colonna nome quello che hai essere distinti.

Questo funziona per me bene.

+6

EPIC WIN! Lei signore, SONO FANTASTICO! Ho cercato ore per questo problema, grazie mille per il tuo contributo. Hai davvero fatto la mia giornata. –

+0

Grazie mille! questo è quello che stavo cercando. appositamente per gestire contentprovider insieme a cursorloader. Ho fatto un piccolo trucco e questo ha funzionato! –

+0

Sì, devo dire anche grazie. Cercavo e provavo molti suggerimenti, solo il tuo ha funzionato per me. Grazie per aver condiviso. Continuate così. – statosdotcom

6

Ci sono molti modi, come già il verde è spuntato. Ma se qualcuno sta cercando di ottenere tramite interrogazione cruda allora qui si va:

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

column3 è una colonna distinta

Problemi correlati