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 + "'");
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
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
.