2010-03-23 107 views
57

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

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

回答

109

,则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

+0

怎么样'“5 ,10“'子句?或者“LIMIT 3 OFFSET 2” – 2017-08-03 12:44:51

3

对于任何人碰到这个答案寻找一种方式来使用LIMIT条款与OFFSET磕磕绊绊,我从Android使用下面的正则表达式来解析限制条款this bug发现查询:

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

LIMIT子句与以下sLimitPattern检查。

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

注意,正则表达式不接受格式offsetNumber,limitNumber即使它不直接接受OFFSET声明。

-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";