Использование оператора LIMIT в запросе SQLite
у меня есть запрос, который выбирает строки ListView без ограничения. Но теперь, когда я реализовал SharedPreferences что пользователь может выбрать, сколько строк будет отображаться в элементе ListView мой запрос SQLite не работает. Я передаю аргумент таким образом:
return wDb.query(TABELANOME, new String[] {IDTIT, TAREFATIT, SUMARIOTIT}, CONCLUIDOTIT + "=1", null, null, null, null, "LIMIT='" + limite + "'");
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";