使用MySQL数据库和Java ResultSet进行分页

时间:2016-01-19 17:16:21

标签: java mysql pagination

要在列表上实现分页,我需要做两个查询:

  1. 使用SELECT COUNT(*)...
  2. 从所选表中获取元素数
  3. 在查询中使用LIMIT和OFFSET获取列表的子集。
  4. 有什么方法可以避免这种情况吗?是否有存储此元数据的元数据?

    函数resultSet.getRow()检索列表的数组索引,然后我需要进行查询,其结果是所有行。我得到一个subSet之后,但这很昂贵。

    我想发送一个带有限制和偏移的唯一查询,并检索所选数据和数据总数。

    这可能吗?

    提前致谢, 涓

2 个答案:

答案 0 :(得分:0)

我看到了一些有关这方面的事情,然后又出现了新的疑虑。

当查询带有限制时,我们可以在"上选择"添加SQL_CALC_FOUND_ROWS *部分如下:

" SELECT SQL_CALC_FOUND_ROWS * FROM ... LIMIT 0,10"

之后,我查询以下内容:

" SELECT FOUND_ROWS()"

我理解第一个查询存储计数在内部var中,其值将在第二个查询时返回。第二个查询不是"选择计数(*)......"查询所以" SELECT FOUND_ROWS()"查询应该很便宜。

我是对的吗?

我做的一些测试显示如下:

- 拳头选择计数(*),第二次选择限制 -

测试1:194毫秒

out:{" total":94607," list":[" 2 - 1397199600000"," 2 - 1397286000000",& #34; 13 - 1398150000000"," 13 - 1398236400000"," 13 - 1398322800000"," 13 - 1398409200000"," 13 - 1398495600000& #34;," 14 - 1398150000000"," 14 - 1398236400000"," 14 - 1398322800000"]}

- 新方式 -

测试2:555毫秒 out:{" total":94607," list":[" 2 - 1397199600000"," 2 - 1397286000000"," 13 - 1398150000000"," 13 - 1398236400000"," 13 - 1398322800000"," 13 - 1398409200000"," 13 - 1398495600000" ," 14 - 1398150000000"," 14 - 1398236400000"," 14 - 1398322800000"]}

为什么测试不显示预期结果? 我的假设是错的?

谢谢,问候

答案 1 :(得分:0)

我已经解决了这个问题

下一个链接得到了响应。

https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/