2010-03-23 2 views
57

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

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

ответ

109

В равно (=) оператор не используется с пунктом 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 синтаксис: http://www.sqlite.org/syntaxdiagrams.html#select-stmt

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

+0

как о '" 5 , 10 "' Оговорка? или 'LIMIT 3 OFFSET 2' –

3

Для тех, кто наткнуться на этом ответ искал способ, чтобы использовать пункт LIMIT с OFFSET, я узнал от this bug, что 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 заявления непосредственно.

-1

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

8, -1

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

SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
builder.setTables(table); 
String query = builder.buildQuery(projection, selection, null, null, null, sortOrder, null); 
query+=" LIMIT 8,-1"; 
Смежные вопросы