//操作的数据库中的表名为:UserInfo,有三个属性:userId,userName,userPassword(顾名思义)
首先为UserInfo表构造一个相对应的JavaBean,UserInfo.java(因为要贴的代码过多,这个就省略了)。
现在正式开始:新建名为:LendDao.java 的java类,其中有两个方法,一个是用来获得,分页后,每一页应该显示的内容( selectLend(int *, int *) );另一个是查询数据表中共有多少条数据,用来确定要分多少页的( selectLendSize() )。
package com.zhou.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.zhou.util.DButil;
import com.zhou.vo.UserInfo;
public class LendDao {
Connection conn = DButil.getConn();
public List<UserInfo> selectLend(int pageNow, int pageSize){
List<UserInfo> list = new ArrayList<UserInfo>();
try {
PreparedStatement pst = conn.prepareStatement("select top "+pageSize+" userId,userName,userPassword from UserInfo where userId not in(select top "+(pageSize*(pageNow-1))+" userId from UserInfo)");
ResultSet rs = pst.executeQuery();
while(rs.next()){
UserInfo us = new UserInfo();
us.setUserId(rs.getInt("userId"));
us.setUserName(rs.getString("userName"));
us.setUserPassword(rs.getString("userPassword"));
list.add(us);
}
return list;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}finally{
DButil.CloseConn();
}
}
public int selectLendSize(){
try {
Connection conn = DButil.getConn();
PreparedStatement pst = conn.prepareStatement("select count(*) from userInfo");
ResultSet rs = pst.executeQuery();
if(rs.next()){
int pagecount = rs.getInt(1);
return pagecount;
}
return 0;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}finally{
DButil.CloseConn();
}
}
}
来解释下两个方法里的sql语句:
"select top "+pageSize+"userId,userName,userPassword from UserInfo where userId not in(select top "+(pageSize*(pageNow-1))+"userId from UserInfo)"
第一个要注意的地方就是 pageSize 和 (pageSize*(pageNow-1)) 都是方法传过来的参数值,所以要注意不能直接写在sql语句的“”中,在sql中能够识别的是传过来的数字0,1,....等。第二个特别要注意的地方就是 top后面一定要接空格,否则就会把top1userId看成一个列属性,可以去看下sql语句中和top有关语句的用法。
"select count(*) from userInfo"
这句相对来说就简单多了,就是一个count(*):统计元组个数函数,通俗点说就是算下,表中有多少行数据。
然后就是实现分页功能的Pager.java:
package com.zhou.tool;
public class Pager {
private int pageNow; //当前页
private int pageSize=4; //每页显示多少条记录
private int totalPage; //共有多少页
private int totalSize; //共有多少条记录
private boolean hasFirst; //是否有首页
private boolean hasPre; //是否有前一页
private boolean hasNext; //是否有下一页
private boolean hasLast; //是否有最后一页
public Pager(int pageNow, int totalSize){
this.pageNow = pageNow;
this.totalSize = totalSize;
}
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
totalPage = getTotalSize()/getPageSize();
if(totalSize%pageSize!=0)
totalPage++;
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalSize() {
return totalSize;
}
public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
}
public boolean isHasFirst() {
if(pageNow==1)
return false;
else return true;
}
public void setHasFirst(boolean hasFirst) {
this.hasFirst = hasFirst;
}
public boolean isHasPre() {
if(pageNow==1)
return false;
else return true;
}
public void setHasPre(boolean hasPre) {
this.hasPre = hasPre;
}
public boolean isHasNext() {
if(pageNow==this.getTotalPage())
return false;
else return true;
}
public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
public boolean isHasLast() {
if(pageNow==this.getTotalPage())
return false;
else return true;
}
public void setHasLast(boolean hasLast) {
this.hasLast = hasLast;
}
}
接下来写调用dao的Action,新建名为:LendAction.java的java类:
package com.zhou.action;
import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.zhou.dao.LendDao;
import com.zhou.form.Pager;
public class LendAction extends ActionSupport{
private int pageNow=1; //初始页为第一页
private int pageSize=4; //每页数据为4条,可调节
public String execute() throws Exception{
LendDao dao = new LendDao();
List list = dao.selectLend(pageNow, pageSize);
Pager page = new Pager(pageNow, dao.selectLendSize());
Map session = ActionContext.getContext().getSession();
session.put("userinfo", list);
session.put("pageinfo", page);
return SUCCESS;
}
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
这个主要是把要保存的信息存到session中,表数据key:userinfo,页码:pageinfo。
配置Struts.xml,加页面显示了:
<package name="Lendfront" extends="struts-default">
<action name="lendaction" class="com.zhou.action.LendAction">
<result name="success">/lendresult.jsp</result>
</action>
</package>
这里就说明下,配置的Action名为:lendaction,等下页面显示中要用到:
lendresult.jsp代码(body中关键代码):记得在页面开头加上Struts header:<%@taglib prefix="s" uri="/struts-tags" %>
<body>
<table border="1" width="599">
<tr>
<td valign="top"><jsp:include page="lenduserinfo.jsp"></jsp:include></td>
</tr>
<tr bgcolor="#E9EDF5" class="font1">
<td align="right">
<s:set name="page" value="#session.pageinfo"/>
<a href="lendaction?pageNow=1">首页</a>
<s:if test="#page.hasPre">
<a href="lendaction?pageNow=<s:property value="#page.pageNow-1"/>">上一页</a>
</s:if>
<s:else>
<a href="lendaction?pageNow=1">上一页</a>
</s:else>
<s:if test="#page.hasNext">
<a href="lendaction?pageNow=<s:property value="#page.pageNow+1"/>">下一页</a>
</s:if>
<s:else>
<a href="lendaction?pageNow=<s:property value="#page.totalPage"/>">下一页</a>
</s:else>
<a href="lendaction?pageNow=<s:property value="#page.totalPage"/>">尾页</a>
</td>
</tr>
</table>
</body>
<jsp:include page="lenduserinfo.jsp"></jsp:include>:这句插入的页面就是用来显示数据库UserInfo表中内容的
lenduserinfo.jsp中代码(同样只包含body,记得加上Struts header):
<body>
<table border="2">
<tr>
<td>userId</td> <td>userName</td> <td>userPassword</td>
</tr>
<s:iterator value="#session.userinfo" id="lend">
<tr>
<td><s:property value="#lend.userId" /></td>
<td><s:property value="#lend.userName" /></td>
<td><s:property value="#lend.userPassword" /></td>
</tr>
</s:iterator>
</table>
</body>
呼,好长的一篇啊