web-dev-qa-db-fra.com

Utilisation de l'instruction LIMIT dans une requête SQLite

J'ai une requête qui sélectionne des lignes dans un ListView sans avoir de limite. Mais maintenant que j'ai implémenté un SharedPreferences que l'utilisateur peut sélectionner combien de lignes seront affichées dans le ListView, ma requête SQLite ne fonctionne pas. Je passe l'argument de cette façon:

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

L'opérateur égal (=) N'est pas utilisé avec la clause LIMIT. Retirez-le.

Voici un exemple de requête LIMIT:

SELECT column FROM table ORDER BY somethingelse LIMIT 5, 10

Ou:

SELECT column FROM table ORDER BY somethingelse LIMIT 10

Dans votre cas, la déclaration correcte serait:

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

Jetez un œil ici à la syntaxe de sélection SQLite: http://www.sqlite.org/syntaxdiagrams.html#select-stmt

Cette image est plutôt utile: http://www.sqlite.org/images/syntax/select-stmt.gif

110
Mike Cialowicz

Pour toute personne tombant sur cette réponse à la recherche d'un moyen d'utiliser une clause LIMIT avec un OFFSET, j'ai découvert par ce bogue que Android utilise l'expression rationnelle suivante pour analyser la clause limite d'une requête:

De <framework/base/core/Java/Android/database/sqlite/SQLiteQueryBuilder.Java>

La clause LIMIT est vérifiée avec le sLimitPattern suivant.

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

Notez que l'expression régulière accepte le format offsetNumber,limitNumber même s'il n'accepte pas directement l'instruction OFFSET.

3
Jon O