2010-03-23 31 views
57

Tengo una consulta que selecciona las filas en un ListView sin tener un límite. Pero ahora que he implementado un SharedPreferences que el usuario puede seleccionar cuántas filas se mostrarán en el ListView, mi consulta SQLite no funciona. Estoy pasando el argumento de esta manera:Uso de la instrucción LIMIT en una consulta SQLite

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

Respuesta

109

Los iguales (=) operador no se utiliza con la cláusula LIMIT. Eliminarlo

He aquí un ejemplo de consulta LIMIT:

SELECT column FROM table ORDER BY somethingelse LIMIT 5, 10 

O:

SELECT column FROM table ORDER BY somethingelse LIMIT 10 

En su caso, la declaración correcta sería:

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

Echa un vistazo aquí en el SQLite seleccione la sintaxis: http://www.sqlite.org/syntaxdiagrams.html#select-stmt

Esta imagen es bastante útil: http://www.sqlite.org/images/syntax/select-stmt.gif

+0

¿qué hay de '" 5 , 10 "' Clause? o 'LIMIT 3 OFFSET 2' –

3

Para cualquiera que tropezarse con esta respuesta en busca de una manera de utilizar una cláusula LIMIT con un OFFSET, lo supe por this bug que Android utiliza la siguiente expresión regular para analizar la cláusula de límite de una consulta:

de <framework/base/core/java/android/database/sqlite/SQLiteQueryBuilder.java>

cláusula LIMIT se comprueba con el siguiente sLimitPattern.

private static final Pattern sLimitPattern = Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); 

Tenga en cuenta que la expresión regular sí acepta el formato offsetNumber,limitNumber a pesar de que no acepta la declaración OFFSET directamente.

-1

Debido a este error que también no permite límites negativos

8, -1

que tuvieron que utilizar esta solución

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