2012-06-27 25 views
27

trato de ejecutar la siguiente consulta prima en Android, parece no funcionarseleccionar el valor distinto en sqlite androide

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

así que decido utilizar el método query() en Android, que son algo así como

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

¿Alguien me puede mostrar cómo seleccionar la categoría distinta para usar query() en lugar de rawquery por favor, cualquier ayuda será muy apreciada!

+1

Se debe evitar el uso de 'rawQuery' siempre que sea posible ... siempre prefieren la construido en los métodos de consulta 'SQLiteDatabase' sobre' rawQuery'. –

Respuesta

42

Puede utilizar this método:

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

Aquí primer argumento especifica si se utiliza o no distinta.

+0

así que cómo seleccionar una categoría distinta, eso es para seleccionar toda la fila ¿verdad? – smith

+2

Pase solo 'category' en' columns [] ', ya que solo necesita esa columna en el resultado como se muestra en la consulta de fila, y obtendrá distintas categorías. –

56

Pero DEBE recordar enviar el argumento en GROUPBY (NOT NULL enviar).

Debe introducir el nombre de columna para distinct.

Ejemplo:

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

cierto - VERDADERO

COLUMN_NAME_2 distinta - la columna nombre de lo que tiene a ser distinto.

Eso me funciona bien.

+6

¡VENTA ÉPICA! ¡Usted señor, SON IMPRESIONANTES! He estado buscando horas para este problema, muchas gracias por su aporte. Realmente me alegraste el día. –

+0

¡Muchas gracias! Esto es lo que estaba buscando. especialmente para tratar con contentprovider junto con cursorloader. Hice un pequeño truco y esto funcionó! –

+0

Sí, tengo que decir gracias también. Estaba buscando e intentando muchas sugerencias, solo la tuya funcionó para mí. Gracias por compartir. Seguid así. – statosdotcom

6

Existen varias formas, como las que ya están marcadas con verde. Pero si alguien está tratando de conseguirlo a través de consulta prima entonces aquí van:

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

column3 es una columna distinta

Cuestiones relacionadas