Использование оператора LIMIT в SQLite-запросе

У меня есть запрос, который выбирает строки в ListView без ограничения. Но теперь, когда я внедрил SharedPreferences, что пользователь может выбрать, сколько строк будет отображаться в ListView, мой SQLite-запрос не работает. Я передаю аргумент следующим образом:

return wDb.query(TABELANOME, new String[] {IDTIT, TAREFATIT, SUMARIOTIT}, CONCLUIDOTIT + "=1", null, null, null, null, "LIMIT='" + limite + "'");

Ответ 1

Оператор equals (=) не используется с предложением LIMIT. Удалите его.

Вот пример LIMIT запроса:

SELECT column FROM table ORDER BY somethingelse LIMIT 5, 10

Или:

SELECT column FROM table ORDER BY somethingelse LIMIT 10

В вашем случае правильным утверждением будет:

return wDb.query(TABELANOME, new String[] {IDTIT, TAREFATIT, SUMARIOTIT}, CONCLUIDOTIT + "=1", null, null, null, null, String.valueOf(limite));

Взгляните на синтаксис SQLite select: http://www.sqlite.org/syntaxdiagrams.html#select-stmt

Этот образ весьма полезен: http://www.sqlite.org/images/syntax/select-stmt.gif

Ответ 2

Для тех, кто наткнулся на этот ответ, ищет способ использовать предложение LIMIT с OFFSET, я узнал из эту ошибку что Android использует следующее регулярное выражение для синтаксического анализа предложения limit:

От <framework/base/core/java/android/database/sqlite/SQLiteQueryBuilder.java>

Предложение LIMIT проверяется с помощью следующего параметра sLimitPattern.

private static final Pattern sLimitPattern = Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?");

Обратите внимание, что регулярное выражение принимает формат offsetNumber,limitNumber, даже если он не принимает оператор OFFSET напрямую.

Ответ 3

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

8, -1

Мне пришлось использовать это обходное решение

SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(table);
String query = builder.buildQuery(projection, selection, null, null, null, sortOrder, null);
query+=" LIMIT 8,-1";