Как получить курсор только с различными значениями?

Я хочу вернуть курсор только с разными значениями столбца. В столбце «Группы» больше элементов, но только 2 значения: 1,2,1,1,1,2,2,2,1.

String[] FROM = {Groups,_ID};

public Cursor getGroups(){
//......
return db.query(TABLE_NAME,FROM,null,null,null,null,null);
}

вернет курсор, содержащий {1,2,1,1,1,2,2,2,1}, но я хотел бы содержать только {1,2}.


person AlexAndro    schedule 09.01.2012    source источник


Ответы (4)


У вас может быть такой запрос sql,

public Cursor usingDistinct(String column_name) {
        return db.rawQuery("select DISTINCT "+column_name+" from "+TBL_NAME, null);
    }
person Lalit Poptani    schedule 09.01.2012
comment
Ошибка была в том, что вы вызвали cursor.moveToFirst(); после Cursor cursor = getGroups(); - person Lalit Poptani; 09.01.2012
comment
Теперь я хочу извлечь значения из курсора. Я пробовал: String gr1 = cursor.getString(0); String gr2 = cursor.getString(1);` но я получаю сообщение об ошибке: CursorIndexOutOfBoundsException: Index -1 requested, with a size of 2 . Затем я изменил его на: Cursor cursor = db.rawQuery("select DISTINCT "+column_name+" from "+TABLE_NAME,null); if(cursor != null){ cursor.moveToFirst(); } return cursor;, и теперь я могу получить доступ только к первому значению, getString(0). Когда я пытаюсь получить строку (1), я получаю NULL. Любая идея, как я могу извлечь оба значения из курсора? Спасибо за решение, предоставленное сейчас. - person AlexAndro; 09.01.2012
comment
Я обнаружил, что мне не следует вызывать cursor.getString(1), потому что курсор имеет только 1 столбец с большим количеством строк. Вместо этого я должен сделать: while(cursor.moveToNext()){ ....cursor.getString(0); ....... } Курсор имеет правильное содержимое, все различные значения. - person AlexAndro; 11.01.2012
comment
Что, если мне нужна вся строка отдельного столбца? - person Si8; 27.10.2016

вы можете использовать отдельный аргумент при выполнении запроса следующим образом:

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

Следуйте этому doc для большей ясности.

person Vineet Shukla    schedule 09.01.2012
comment
Именно то, что я искал :) - person User3; 06.10.2015

Вы можете использовать приведенный ниже пример запроса, так как вы должны указать имя столбца для разных

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

COLUMN_NAME_2 — имя столбца для отдельного.

не забудьте добавить имена столбцов GROUP BY

person bhavikshah28    schedule 30.05.2016

Используйте логическое значение true в отдельном аргументе, например:

public Cursor query (**true**, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
person Prashanth    schedule 15.10.2019