在Android中,LIMIT和OFFSET无法正常工作

时间:2016-12-06 05:43:32

标签: java android database

我的数据库表:

Column1     Column2     Column3
First Col   Second Col  Third Col
First Row   First Row   First Row
Second Row  Second Row  Second Row
Third Row   Third Row   Third Row
Four Row    Four Row    Four Row
Fifth Row   Fifth Row   Fifth Row

我正在尝试以下查询:

第一次查询:

String q = "select * from " + tableName + " LIMIT 2 OFFSET 3 ";
 sqlDB.rawQuery(q,null);

第二次查询:

sqlDB.query(q, null,null, null, null, null, null, "3,2");

两个查询都给我以下结果:

First Col   Second Col  Third Col
First Col   Second Col  Third Col

而不是低于结果:

Third Row   Third Row   Third Row
Four Row    Four Row    Four Row

我错过了什么或做错了吗?得到这个结果。

1 个答案:

答案 0 :(得分:1)

查询

SELECT *
FROM tableName
LIMIT 2 OFFSET 3

表示从第四个位置开始返回两条记录。

您对SQLite的Android数据库查询的API调用

sqlDB.query(q, null,null, null, null, null, null, "3,2");

的限制字符串为"3,2",其格式为

"offset, limit"

换句话说,偏移和限位开关位置,因此查询说的是相同的东西,因此你得到相同的结果集。

仅供参考,我在文档中没有发现任何相关内容,但我确实找到了this SO question,其中提到了SQLite Android API中限制字符串的语法。

<强>更新

为了在使用LIMITOFFSET时获得一致的行为,无论是在原生查询中还是使用Android API,使用ORDER BY也许是有意义的。对结果集使用排序允许偏移或限制对基础数据有意义。数据库表本身是在无序集之后建模的。因此,使用不带ORDER BY的偏移很可能不是您想要做的事情。