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


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

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

3 ответа:

равно (= оператор) не используется с 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

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

С <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 заявление непосредственно.

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

8,-1

Я должен был использовать этот метод

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