如假定共3个分表,记录数分别为 90,120,80 总记录数为 290
设分页是每页显示40条,则
第1页 表一的 1 到 40
第2页 表一的 41 到 80
第3页 表一的 81 到 90 + 表二的 1 到 30
第4页 表二的 31 到 70
第5页 表二的 71 到 110
第6页 表二的 111 到 120 + 表三的 1 到 30
做“上一页”和“下一页”怎么实现呀
https://www.oschina.net/question/578900_233068
SELECT a.shijian, a.didian from (
SELECT b.shijian as shijian ,b.didian as didian FROM
b
UNION ALL
SELECT c.shijian as shijian ,c.didian as didian FROM
c
UNION ALL
SELECT d.shijian as shijian ,d.didian as didian FROM
d
) a
不知这种是不是楼主需求的
从页面传递页码到后台计算查询开始位置,查询第一个数据库根据查询结果判断开始位置是否包含在第一个数据库中,如不包含查询第二个库,以此类推。
如果在第一个数据库根据开始位置与条数进行查询。对查询结果进行长度判断。不满足寻求的情况下查询第二张表
public ArrayList Search(int pageNO){//pageNO表示查询的页号
String sql="select * from servlet_tb limit ?,?";
ArrayList al=new ArrayList();
int pageSize=3;//表示一页要输出多少条记录
//获取连接
connect=this.getConnect();
try {
pstm=connect.prepareStatement(sql);
pstm.setInt(1, pageNO*pageSize-pageSize);
pstm.setInt(2, pageSize);
result=pstm.executeQuery();
//将查询结果数据封装到UserBean中去,再封装到ArrayList中去
while(result.next()){
UserBean ub=new UserBean();
ub.setId(result.getString(1));
ub.setName(result.getString(2));
al.add(ub);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
//关闭资源
this.close();
}
//返回结果
return al;
}
//得到数据库中有多少记录
public int getCount(){
int count=0;
String sql="select count(*) as pageNum from servlet_tb";
connect=this.getConnect();
try {
pstm=connect.prepareStatement(sql);
result=pstm.executeQuery();
//必须要有result.next();语句,否则游标查找不到
if(result.next())
count=result.getInt("pageNum");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
this.close();
}
return count;
}
上面是关于数据库的操作。
根据返回的记录数和页的大小得出有多少页;
int getPageNum(){
int result=pageCount/pageSize;
if(pageCount%pageSize==0)
return result;
else return result+1;
}
在前端的代码也就是输出格式:
输出当前页的内容:操作数据库返回的数据我是封装到al里边了
ArrayList al=(ArrayList)request.getAttribute("data");
while(i UserBean ub=al.get(i);
%>
<%=ub.getId() %><%=ub.getName() %>
<%
i++;
}
//下面的代码就是显示页数的
int i=0;
if(pageNO==1){//当显示的页号是1的时候
while(i<pageNum)
out.println("<a href=' 资源路径"?pageNO="+i+"'>"+i+"</a>");
i++;
}
out.println(""<a href=' 资源路径"?pageNO="+pageNO+1+"'>"+"下一页”+"</a>“);
}else if(pageNO==pageCount){//当显示的页号是最后一页的时候
out.println(""<a href=' 资源路径"?pageNO="+pageNO-1+"'>"+"上一页”+"</a>“);
while(i<pageNum)
out.println("<a href=' 资源路径"?pageNO="+i+"'>"+i+"</a>");
i++;
}
}else {//既不是最后一页也不是第一页
out.println("""+"上一页”+"“);
while(i out.println(""+i+"");
i++;
}
out.println("""+"下一页”+"“);
}
感觉最合适的方式还是将总体数据量查出 ;在后台做截取返回处理,虽然这样数据库承载加大,但省去繁琐的逻辑判断及sql处理!