【问题标题】:Using the LIMIT statement in a SQLite query在 SQLite 查询中使用 LIMIT 语句
【发布时间】:2010-03-23 04:58:49
【问题描述】:

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

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

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    等于 (=) 运算符不与 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

    【讨论】:

    • "5, 10" 子句怎么样?或LIMIT 3 OFFSET 2
    【解决方案2】:

    对于任何偶然发现此答案并寻找将LIMIT 子句与OFFSET 结合使用的方法的人,我从this bug 发现Android 使用以下正则表达式来解析查询的限制子句:

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

    使用以下 sLimitPattern 检查 LIMIT 子句。

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

    请注意,正则表达式确实接受 offsetNumber,limitNumber 格式,即使它不直接接受 OFFSET 语句。

    【讨论】:

      【解决方案3】:

      由于这个错误也不允许负限制

      8,-1

      我不得不使用这个解决方法

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

      【讨论】:

        猜你喜欢
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        • 2021-08-07
        相关资源
        最近更新 更多