前几天开发一个人员管理系统,使用MVC模式开发,有好多地方用到了分页,于是想把分页写出来,给不太熟的朋友们参考下。
这是在BO层的代码,该类的名字是DBService.java
首先我们需要定义四个变量
int pageSize = 4;//指定每页显示3条记录
int pageCount;//该值是计算出来的,表示共有多少页
int rowCount; //表示共有多少条记录,从数据库查询得到的
int rowNum; //表示第几行
static PreparedStatement ps = null;
static ResultSet rs = null;
//返回分页的总页数
public int getPageCount()
{
Connection cn = null;
try
{
cn = ConnectionDB.getConnection();
//查出共有多少页
ps = cn.prepareStatement("select count(*) from users");
rs = ps.executeQuery();
rs.next();
rowCount = rs.getInt(1);
pageCount = (rowCount - 1)/pageSize + 1;
}
catch (Exception e) {
e.printStackTrace();
}
finally
{
//这是我封装起来的类,就是用来关闭对数据库的操作的,大家可以按照自己的想法写
ConnectionDB.closeResultSet(rs);
ConnectionDB.closePreparedStatement(ps);
ConnectionDB.closeConnection(cn);
}
return pageCount;
}
//得到用户需要显示的用户信息
public ArrayList getUsersByPage(int pageNow)
{
Connection cn = null;
ArrayList al = new ArrayList();
try
{
//计算从第几行开始显示
rowNum = (pageNow - 1) * 4;
//分页查询,我使用的是mysql数据库,分页查询的语句根据所使用的数据库不同有可能有差异,可到网上查找对应数据库的分页查询语句
cn = ConnectionDB.getConnection();
ps = cn.prepareStatement("select * from users order by id asc limit ?,4;");
ps.setInt(1, rowNum);
rs = ps.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setPassword(rs.getString(2));
user.setUsrename(rs.getString(3));
user.setEmail(rs.getString(4));
user.setGrade(rs.getString(5));
//将user放到al当中去,绝对不能忘记,不然得到al的值为空
al.add(user);
}
}
catch (Exception e) {
e.printStackTrace();
}
finally
{
ConnectionDB.closeResultSet(rs);
ConnectionDB.closePreparedStatement(ps);
ConnectionDB.closeConnection(cn);
}
return al;
}
//在jsp当中的代码
<%
//定义分页所需要的变量
int pageNow = 1;//当前页
String spageNow = request.getParameter("pageNow");
if(spageNow != null)
{
pageNow = Integer.parseInt(spageNow);
}
DBService db = new DBService();
ArrayList al = db.getUsersByPage(pageNow);
%>
<table border=1 width=500>
<tr>
<th>ID</th>
<th>密码</th>
<th>用户名</th>
<th>Email</th>
<th>等级</th>
<th>修改用户</th>
<th>删除用户</th>
</tr>
<%
for(int i = 0 ; i< al.size(); i ++)
{
User user = (User)al.get(i);
%>
<tr>
<td><%=user.getId()%></td>
<td><%=user.getPassword()%></td>
<td><%=user.getUsrename()%></td>
<td><%=user.getEmail()%></td>
<td><%=user.getGrade()%></td>
<td><a href="/UserManagerSys/ModifyUser.jsp?id=<%=user.getId()%>
&password=<%=user.getPassword()%>
&username=<%=user.getUsrename()%>
&email=<%=user.getEmail()%>
&grade=<%=user.getGrade()%>">
修改用户</a></td>
<td><a href="javascript:if(confirm('确实要删除该用户吗?'))location='/UserManagerSys/DelControl?id=<%=user.getId()%>'">删除用户</a></td>
</tr>
<%
}
%>
</table> <br/>
<%
//得到pagecount
int pageCount = db.getPageCount();
if(pageNow > 1)
{
%>
<a href='/UserManagerSys/Main.jsp?pageNow=<%=(pageNow-1)%>'>上一页</a>
<%
}
for(int i = 1; i <= pageCount; i ++)
{
%>
<a href='/UserManagerSys/Main.jsp?pageNow=<%=i%>'><%=i %></a>
<%
}
if(pageNow < pageCount)
{
%>
<a href='/UserManagerSys/Main.jsp?pageNow=<%=(pageNow+1)%>'>下一页</a>
<%
}
%>
(当前第<%=pageNow%>页/共<%=pageCount%>页)
实现分页功能本身的代码不是很多,给大家一个参考,欢迎大家多讨论