我有一个查询,可以选择ListView
中没有限制的行。但是现在我已经实现了SharedPreferences
,用户可以选择ListView
中显示的行数,我的SQLite查询不起作用。我以这种方式传递论据:
return wDb.query(TABELANOME, new String[] {IDTIT, TAREFATIT, SUMARIOTIT}, CONCLUIDOTIT + "=1", null, null, null, null, "LIMIT='" + limite + "'");
答案 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";