У меня есть запрос, который выбирает строки в ListView
без ограничения. Но теперь, когда я внедрил SharedPreferences
, что пользователь может выбрать, сколько строк будет отображаться в ListView
, мой SQLite-запрос не работает. Я передаю аргумент следующим образом:
return wDb.query(TABELANOME, new String[] {IDTIT, TAREFATIT, SUMARIOTIT}, CONCLUIDOTIT + "=1", null, null, null, null, "LIMIT='" + limite + "'");
Оператор 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
Для тех, кто наткнулся на этот ответ, ищет способ использовать предложение 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
напрямую.
Из-за этой ошибки, которая также не допускает отрицательных пределов
8, -1
Мне пришлось использовать это обходное решение
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(table);
String query = builder.buildQuery(projection, selection, null, null, null, sortOrder, null);
query+=" LIMIT 8,-1";
"5, 10"
пункт? илиLIMIT 3 OFFSET 2