视频中老师的分页,开始
begin指的是开始读取的行数,从0开始
end是读取到哪里的行数,不包括end
比如显示第2页的数据,每页2行。
int
begin = (currentPage -
1
) * pageRows;
int
end = currentPage * pageRows;
计算出begin=2 end=4
进行while循环的时候

currentNum指的是当前打印的行数。注意是从0开始的。那么对应输出第一行记录的时候,currentNum=0,输出完第一行记录的内容以后,currentNum++,才为1,也就是第二行记录在输出时的currentNum=1
由此可见,这种写法,由于一开始就把currentNum的值设置为0,并且在输出完第一行记录的内容后才加1
所以数据库当中的记录被我们用currentNum标识成了从0开始。
那么当我们比如显示第2页的数据,每页2行的时候,上面计算出计算出begin=2 end=4
进入while循环的时候,进行if判断,显然,第一次currentNum的值为0 0>=2 不成立,所以并没有执行if块,直接让currentNum++变成1,也就是说第一条记录(被我们标识成currentNum=0的记录)被略过没有打印。
再次进入循环,进行if判断,显然,第二次currentNum的值为1 1>=2 不成立,所以并没有执行if块,直接让currentNum++变成2,也就是说第二条记录(被我们标识成currentNum=1的记录)被略过没有打印。
再次进入循环,进行if判断,显然,第三次currentNum的值为2 2>=2 成立,执行if块,打印第三条记录(被我们标识成currentNum=2的记录)的内容,判断if条件,2==(4-1=3) 不成立,不执行break,继续向下,执行currentNum++变成3.
再次进入循环,进行if判断,显然,第四次currentNum的值为3 3>=2 成立,执行if块,打印第四条记录(被我们标识成currentNum=3的记录)的内容,判断if条件,3==(4-1=3) 成立,执行break,跳出整个while循环。
也就是说,最终打印了,
结果集中的第三条记录(被我们标识成currentNum=2的记录)的内容
结果集中的第四条记录(被我们标识成currentNum=3的记录)的内容
因为我们对结果集当中的记录进行的currentNum标识本来就是从0开始的。
再来看if的判断
currentNum>=begin && currentNum<end
为什么没有在end那边加等号呢,
看上面的例子,打印第2页的内容,每行打印2条。
begin=2
end=4
打印数据currentNum=2,currentNum=3
发现规律了吗,实际上就是从begin的值(2)开始往下数,数2个(因为每页显示2个。
那么end是什么,end其实就是我们计算出来的,读到哪里的个数,当然我们也可以将end的值直接-1,求出来到底到哪里结束,
这样更好理解:

或者你觉得,从0开始太难受,为什么不都从1开始,也可以这样:

结果都没有问题,显示了结果集里,第三条与第四条的数据:
