Как не использовать LIMIT при использовании DISTINCT с методом запроса SQLiteDatabase? - PullRequest
3 голосов
/ 10 мая 2019

Я хочу использовать SQL SELECT DISTINCT book FROM bible ORDER BY book; с использованием метода SQliteDatabase query , я пытаюсь: -

Cursor csr = mDB.query(true,TABLE_BIBLE,new String[]{COL_BIBLE_BOOK},whereclause,whereargs,null,null,COL_BIBLE_BOOK,"-999");

Два из 4 запросов имеют логическое значение true для DISTINCT, оба должны иметь параметр LIMIT. SQLite говорит отрицательно без ограничений, но при этом выдает ошибку типа

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bible/com.example.bible.MainActivity}: java.lang.IllegalArgumentException: invalid LIMIT clauses:-999

Я знаю, что вы можете делать с rawQuery , но использовать его из Руководства по Android Devloper не рекомендуется. Поэтому хочу использовать query .

Я также знаю, что вы можете использовать большое число, что не очень хорошо, хотя это может сбить с толку.

Ответы [ 2 ]

3 голосов
/ 10 мая 2019

SQLite говорит отрицательно без ограничений

Где это так?Я читаю документы как:

Передача нуля означает, что предложение LIMIT отсутствует.

...

IЯ знаю, что вы можете делать с rawQuery, но не рекомендуется использовать его из Android Devloper Guide

rawQuery() просто отлично, даже если разработчики API хотели, чтобы вы использовали более причудливые методы для построения SQL.


SELECT скажем Если выражение LIMIT оценивается как отрицательное значение, то нет верхней границы числа возвращаемых строк

Это верно и работает в rawsqlite SQL.

Если вы используете query(), вы получаете дополнительную проверку от SQLiteQueryBuilder, которая выдает это исключение, которое вы видите.См. источник .

2 голосов
/ 10 мая 2019

Вы можете использовать null (как и для большинства других параметров (кроме 1-го (имя таблицы)) : -

Cursor csr = mDB.query(true,TABLE_BIBLE,new String[]{COL_BIBLE_BOOK},whereclause,whereargs,null,null,COL_BIBLE_BOOK,null);

Вы также можете использоватьвключите DISTINCT (в данном случае) вместе с именем столбца, например: -

Cursor csr = mDB.query(TABLE_BIBLE,new String[]{"DISTINCT " + COL_BIBLE_BOOK},whereclause,whereargs,null,null,COL_BIBLE_BOOK);

Первое, вероятно, будет предпочтительным.

...