Использование оператора 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";