在activeJDBC中获取offset和orderBy的记录

时间:2017-09-10 12:38:57

标签: java activejdbc javalite

我使用以下方式获取重复记录:

List<Post> postList = Post.findAll().limit(Long.valueOf(request.queryParams("limit"))).offset(Long.valueOf(request.queryParams("offset"))).orderBy("id desc");

当我删除orderBy时,它可以正常工作。

  • 第一次拉动:限制为3偏移为0
  • 第二次拉动:限制为3次偏移为4 //I get duplicates on second pull

为什么会这样?

更新

表格结构:

CREATE TABLE `post` (
  `id` mediumint(15) NOT NULL AUTO_INCREMENT,
  `title` text,
  `details` text,
  `created_at` text,
  `username` varchar(45) DEFAULT NULL,
  `userImage` text,
  `url` varchar(1000) DEFAULT NULL,
  `article_id` text NOT NULL,
  `postImageUrl` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=243 DEFAULT CHARSET=utf8;

INSERT INTO `lt9vgms366ueidoa`.`post`
(`id`,
`title`,
`details`,
`created_at`,
`username`,
`userImage`,
`url`,
`article_id`,
`postImageUrl`)
VALUES
(<{id: }>,
<{title: "Test"}>,
<{details: "Test"}>,
<{created_at: }>,
<{username: "Test"}>,
<{userImage: }>,
<{url: "Test"}>,
<{article_id: "121"}>,
<{postImageUrl: }>);

请求映射:

get("/get_data_on_scrollEnd", (Request request, Response response) -> {
    System.out.println("ON SCROLL END -- LIMIT: "+ request.queryParams("limit") + " " + "OFFSET: "+ request.queryParams("offset"));
    List<Post> postList = Post.findAll().limit(Long.valueOf(request.queryParams("limit"))).offset(Long.valueOf(request.queryParams("offset")));
    System.out.println("///////////////////////");
    log.info("PAGINATION: " + postList);
    System.out.println("///////////////////////");
    return postList;
}, new JsonTransformer());

返回的List<Post> postList为空。

1 个答案:

答案 0 :(得分:1)

因为第二次拉力的偏移需要偏移+限制。

此外,您可能希望查看为在网页上分页结果而构建的Paginator

在偏离主题的情况下,如果客户开始弄乱您的URL,那么从参数中解析长值的方式很容易受到运行时异常的影响。