当前位置: 技术问答>java相关
关于MYSQL分页,为什么会有重复记录
来源: 互联网 发布时间:2017-03-11
本文导语: 我用下面的代码进行分页,最后一页记录数如果小于pageSize就会重复最后一条记录直到等于pagesize,请问是怎么回事?该怎么解决? 谢谢,代码如下: 用 户 列 表 ...
我用下面的代码进行分页,最后一页记录数如果小于pageSize就会重复最后一条记录直到等于pagesize,请问是怎么回事?该怎么解决?
谢谢,代码如下:
用 户 列 表
用户名
昵称
信箱
注册时间
操作类型
pageCount){
toPage=pageCount;
}
rs.absolute ((toPage-1)*pageSize+1);
if (pageCount>0){
i=0;
while(i
修改 删除
共条记录,页,当前第页,每页显示条
首页 | 上页 | 下页 | 尾页
谢谢,代码如下:
用 户 列 表
用户名
昵称
信箱
注册时间
操作类型
pageCount){
toPage=pageCount;
}
rs.absolute ((toPage-1)*pageSize+1);
if (pageCount>0){
i=0;
while(i
修改 删除
共条记录,页,当前第页,每页显示条
首页 | 上页 | 下页 | 尾页
|
while(i
修改 删除
修改 删除
修改 删除
pagesize) {
break;
}
}
%>
修改 删除
修改 删除
修改 删除
pagesize) {
break;
}
}
%>
|
////////////////////////////////////
if (pageCount>0){
i=0;
while(i
修改 删除
|
搂主的方法在逻辑上没有问题,估计是不支持rs.isAfterLast()方法(这样猜测似乎没有道理,因为其它方法都支持,我这里是高级方法都不支持,郁闷阿),你可以自己单独测试一下rs.isAfterLast()方法,比如if(rs.isAfterLast())out.println("end");等等
你说“cheqiang(小六子)的方法查询出来后显示的结果会少一条的!也就是说符合条件的每一条记录不会显示的”,我不明白你这句话的意思,“少一条”是在哪儿少一条,怎么又是“每一条”?
其实cheqiang(小六子)的方法会造成每一页多一条记录(仅仅从逻辑上分析),你想,假如pagesize为1,第一次进入循环,显示了一条记录,并经过i++后,i就变为1了,这时就应该退出,即应该改为
if (i==pagesize)break;
你说“cheqiang(小六子)的方法查询出来后显示的结果会少一条的!也就是说符合条件的每一条记录不会显示的”,我不明白你这句话的意思,“少一条”是在哪儿少一条,怎么又是“每一条”?
其实cheqiang(小六子)的方法会造成每一页多一条记录(仅仅从逻辑上分析),你想,假如pagesize为1,第一次进入循环,显示了一条记录,并经过i++后,i就变为1了,这时就应该退出,即应该改为
if (i==pagesize)break;
|
while(i
修改 删除
从第0条开始读取,读取10条
select * from table limit 10,10 --->从第10条开始读取,读取10条
select * from table limit 130,10 --->从第130条开始读取,读取10条,但是只有9条了,所以就只读了9条
select * from table limit 20,50 --->从第20条开始读取,读取50条
我觉得已经将得很清楚了,不知道你有没有明白
http://www.e21study.com/mysqlpc/manual_Reference.html#SELECT
看看这个,我建议你找一个mysql得中文手册看看,mysql还是很强大得
修改 删除
从第0条开始读取,读取10条
select * from table limit 10,10 --->从第10条开始读取,读取10条
select * from table limit 130,10 --->从第130条开始读取,读取10条,但是只有9条了,所以就只读了9条
select * from table limit 20,50 --->从第20条开始读取,读取50条
我觉得已经将得很清楚了,不知道你有没有明白
http://www.e21study.com/mysqlpc/manual_Reference.html#SELECT
看看这个,我建议你找一个mysql得中文手册看看,mysql还是很强大得
|
哦,这好像和你前面的定位有关
即rs.absolute ((toPage-1)*pageSize+1);多定位了一个
因为记录编号是从0开始的,你把它改成rs.absolute ((toPage-1)*pageSize);试试
即rs.absolute ((toPage-1)*pageSize+1);多定位了一个
因为记录编号是从0开始的,你把它改成rs.absolute ((toPage-1)*pageSize);试试
|
I am very sorry!
我记错了记录编号是从1开始的,但absolute()的作用就是将游标定位到指定的位置,再用rs.next()时就又往后移了一条,所以会少一条,改成这样就行了
rs.absolute ((toPage-1)*pageSize+1);
if (pageCount>0){
i=0;
while(true){
%>
修改 删除
我记错了记录编号是从1开始的,但absolute()的作用就是将游标定位到指定的位置,再用rs.next()时就又往后移了一条,所以会少一条,改成这样就行了
rs.absolute ((toPage-1)*pageSize+1);
if (pageCount>0){
i=0;
while(true){
%>
修改 删除
|
搂主
我最近用别人的jbuilder测试了一下你的代码,确实没有问题,还是那句话,你可以单独写一段测试代码看isAfterLast()函数是否有效
我上面的写法还可以改写成
rs.absolute ((toPage-1)*pageSize+1);
if (pageCount>0){
i=0;
do{
%>
修改 删除
pagesize) {
break;
}
}
我最近用别人的jbuilder测试了一下你的代码,确实没有问题,还是那句话,你可以单独写一段测试代码看isAfterLast()函数是否有效
我上面的写法还可以改写成
rs.absolute ((toPage-1)*pageSize+1);
if (pageCount>0){
i=0;
do{
%>
修改 删除
pagesize) {
break;
}
}