在SQLite查询中使用LIMIT语句

时间:2010-03-23 04:58:50

标签: android sqlite

我有一个查询,可以选择ListView中没有限制的行。但是现在我已经实现了SharedPreferences,用户可以选择ListView中显示的行数,我的SQLite查询不起作用。我以这种方式传递论据:

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

3 个答案:

答案 0 :(得分:110)

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选择语法: http://www.sqlite.org/syntaxdiagrams.html#select-stmt

此图片非常有用: http://www.sqlite.org/images/syntax/select-stmt.gif

答案 1 :(得分:3)

对于任何想要找到LIMIT OFFSET <framework/base/core/java/android/database/sqlite/SQLiteQueryBuilder.java>条款使用private static final Pattern sLimitPattern = Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); 的方法的人来说,我发现this bug Android使用以下正则表达式来解析限制条款查询:

来自offsetNumber,limitNumber

  

使用以下sLimitPattern检查LIMIT子句。

OFFSET

请注意,正则表达式确实接受格式{{1}},即使它不直接接受{{1}}语句。

答案 2 :(得分:-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";