我的数据库表:
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
我错过了什么或做错了吗?得到这个结果。
答案 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中限制字符串的语法。
<强>更新强>
为了在使用LIMIT
和OFFSET
时获得一致的行为,无论是在原生查询中还是使用Android API,使用ORDER BY
也许是有意义的。对结果集使用排序允许偏移或限制对基础数据有意义。数据库表本身是在无序集之后建模的。因此,使用不带ORDER BY
的偏移很可能不是您想要做的事情。