jsp分页查询与显示,一只纯菜鸟的角度....

来源:互联网 发布:数据归一化的方法 编辑:程序博客网 时间:2024/06/08 17:14

分页查询作用就是把数据库中的内容在网页上以“共x页,当前x页,下一页”的形式展示。我很菜,下面通过一个实例来演示下分页查询和显示的全过程,如果哪位大侠觉得代码眼熟...我郑重申明:我是复制粘贴的。当然一如既往的欢迎大侠们补充和纠错。

首先把这个实例说明下:

在数据库中有张用户表,表中内容如下:


(以自增的形式生成主键,为什么有时候插入失败时自增的序列就不正确....

有个前台页面如图


我们的目标是:

点击会员管理按钮时,在右边出现相应界面同时把用户表中的内容填入页面的表格中,每一页填4条。同时让页面中红圈部分都有效果。(由于源码比较多我只贴出来关键的,需要完整版的朋友请留言。)

Let’s move

1、在数据库中测试分页查询语句。

我的表设计如下图。


测试查出第一页的内容,sql如下:

下面的一坨都是同一条语句,典型的嵌套查询。

select user_id,  user_name, user_password,gender ,createdate , email ,tel , address ,postcode,images , user_sign , score

from(

select rownum rn,user_id, user_name, user_password,gender ,createdate , email ,tel , address ,postcode,images , user_sign , score 

from(

select  *  from  sd_user  order  by  user_id

) where rownum <=4

) where rn>0

1、封装分页模型(就是写个PageModel,java

正如java面向对象的思想,因为所有分页查询返回的信息大体类似所以我们把它写成个类。

/*

 * 封装分页查询信息的类

 */

public class PageModel<E> {

//结果集

private List<E> list;

//总查询记录条数

private int totalRecords;

//每页多少记录

private int pageSize;

//当前是第几页

private int pageNow;

//总页数 java中除法都是取整的所以要加一

public int getTotalPages(){

return(totalRecords+pageSize-1)/pageSize;

}

//取得首页

public int getTopPageNo(){

return 1;

}

//上一页

public int getPreviousPageNo(){

if(pageNow<=1){

return 1;

}else{

return pageNow-1;

}

}

//取得尾页

public int getBottomPageNo(){

return getTotalPages();

}

后面的getset方法自己加上。

3Control(就是写个类从数据库获取相应的数据)

public class ManageMember {

private static ManageMember instance = new ManageMember();

private ManageMember() {

}

public static ManageMember getInstance() {

return instance;

}

public PageModel findMemberList(int pageNo, int pageSize) {

// 用StringBuffer比String快,用StringBulider会更快.他们三有啥具体区别呢?

StringBuffer sbsql = new StringBuffer();

sbsql.append(

"select  user_id,  user_name, user_password,gender ,createdate , email ,tel ,address ,postcode,images , user_sign , score ")

.append("from(")

.append(" select rownum rn, user_id,  user_name, user_password,gender ,createdate , email ,tel , address ,postcode,images , user_sign , score ")

.append("from(")

.append(" select * from sd_user order by user_id ")

.append(")where rownum<=?")

.append(")where rn>?");

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

List memberList = new ArrayList<Member>();

PageModel pm = null;

try {

conn = DBUtil.getConnection();

ps = conn.prepareStatement(sbsql.toString());

ps.setInt(1, pageNo * pageSize);

ps.setInt(2, (pageNo - 1) * pageSize);

rs = ps.executeQuery();

while (rs.next()) {

Member member = new Member();

member.setUser_id(rs.getInt(1));

member.setUser_account(rs.getString(2));

member.setUser_password(rs.getString(3));

member.setUser_sex(rs.getString(4));

member.setUser_regdate(rs.getString(5));

member.setUser_email(rs.getString(6));

member.setUser_tel(rs.getString(7));

member.setUser_address(rs.getString(8));

member.setUser_postcode(rs.getString(9));

member.setUser_imagespath(rs.getString(10));

member.setUser_sign(rs.getString(11));

member.setUser_score(rs.getInt(12));

memberList.add(member);

}

pm = new PageModel();

pm.setList(memberList);

pm.setTotalRecords(getTotalRecords(conn));

pm.setPageNow(pageNo);

pm.setPageSize(pageSize);

return pm;

catch (SQLException e) {

e.printStackTrace();

finally{

DBUtil.closeSource(rs, ps, conn);

}

return null;

}

private int getTotalRecords(Connection conn) throws SQLException{

String sql="select count(*) from sd_user";

PreparedStatement ps=null;

ResultSet rs=null;

try {

ps=conn.prepareStatement(sql);

    rs=ps.executeQuery();

if(rs.next()){

return rs.getInt(1);

}

catch (SQLException e) {

e.printStackTrace();

}finally{

if(ps!=null){

ps.close();

}

if(rs!=null){

rs.close();

}

}

return 0;

}

}

4、在jsp中显示相应结果

注意引入你用到了的类。

<%

int pageNo=1;

int pageSize=4;

//当需要翻页时获取pageNo

String pageNoString=request.getParameter("pageNo");

if(pageNoString!=null){

pageNo=Integer.parseInt(pageNoString);

}

PageModel<Member> pageModel=ManageMember.getInstance().findMemberList(pageNo, pageSize);

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>会员管理</title>

<link rel="stylesheet" href="../style/drp.css">

<script type="text/javascript">

function topPage(){

window.self.location = "MemberCount.jsp?pageNo=<%=pageModel.getTopPageNo()%>";

}

function bottomPage(){

 window.self.location = "MemberCount.jsp?pageNo=<%=pageModel.getBottomPageNo()%>";

}

function previousPage(){

     window.self.location = "MemberCount.jsp?pageNo=<%=pageModel.getPreviousPageNo() %>";

}

function nextPage(){

 window.self.location = "MemberCount.jsp?pageNo=<%=pageModel.getNextPageNo() %>";

}

</script>

</head>

<body class="body1">

<form name="userform" id="userform">

<div align="center">

<table width="95%" border="0" cellspacing="0" cellpadding="0"

height="35">

<tr>

<td class="p1" height="18" nowrap> </td>

</tr>

<tr>

<td width="522" class="p1" height="17" nowrap><img

src="../images/mark_arrow_02.gif" width="14" height="14">

  <b>用户管理模块>>用户管理</b></td>

</tr>

</table>

<hr width="100%" align="center" size=0>

</div>

<table width="95%" height="20" border="0" align="center"

cellspacing="0" class="rd1" id="toolbar">

<tr>

<td width="49%" class="rd19"><font color="#FFFFFF">

已注册的用户列表</font></td>

<td width="27%" nowrap class="rd16">

<div align="right"></div></td>

</tr>

</table>

<table width="95%" border="1" cellspacing="0" cellpadding="0"

align="center" class="table1">

<tr>

<td width="55" class="rd6"><input type="checkbox" name="ifAll"

onClick="checkAll(this)"></td>

<td width="100" class="rd6">用户ID</td>

<td width="152" class="rd6">用户名称</td>

<td width="152" class="rd6">注册日期</td>

<td width="152" class="rd6">用户当前积分</td>

<td width="170" class="rd6">用户邮箱</td>

<td width="200" class="rd6">收货地址</td>

</tr>

<!-- 拿出pageModel中list的内容开始填入表格 -->

<%

List<Member> allMember = pageModel.getList();

for (Iterator<Member> iterator = allMember.iterator(); iterator

.hasNext();) {

Member onemember = iterator.next();

%>

<tr>

<td class="rd8"><input type="checkbox" name="selectFlag"

class="checkbox1"></td>

<td class="rd8"><%=onemember.getUser_id()%></td>

<td class="rd8"><%=onemember.getUser_account()%></td>

<td class="rd8"><%=onemember.getUser_regdate()%></td>

<td class="rd8"><%=onemember.getUser_score()%></td>

<td class="rd8"><%=onemember.getUser_email()%></td>

<td class="rd8"><%=onemember.getUser_address()%></td>

</tr>

<%

}

%>

</table>

<table width="95%" height="30" border="0" align="center"

cellpadding="0" cellspacing="0" class="rd1">

<tr>

<td nowrap class="rd19" height="2">

<div align="left">

<font color="#FFFFFF">   <%=pageModel.getTotalPages()%>

 </font>      <font color="#FFFFFF">当前第</font> 

<font color="#FF0000"> <%=pageModel.getPageNow()%> </font>  <font

color="#FFFFFF"></font> <font color="#FFFFFF">    注册人数</font> 

<font color="#FF0000"> <%=pageModel.getTotalRecords()%> </font>

</div></td>

<td nowrap class="rd19">

<div align="right">

<input name="btnTopPage" class="button1" type="button"

id="btnTopPage" value="|<< " title="首页" onClick="topPage()">

<input name="btnPreviousPage" class="button1" type="button"

id="btnPreviousPage" value=" <  " title="上页"

onClick="previousPage()"> <input name="btnNextPage"

class="button1" type="button" id="btnNextPage" value="  > "

title="下页" onClick="nextPage()"> <input

name="btnBottomPage" class="button1" type="button"

id="btnBottomPage" value=" >>|" title="尾页"

onClick="bottomPage()"> <input name="btnDelete"

class="button1" type="button" id="btnDelete" value="删除"

onClick="deleteUser()">

</div></td>

</tr>

</table>

<p> </p>

</form>

</body>

</html>


好了,分页查询和显示的核心代码我都贴出来,真心地欢迎大侠们支出其中的不足和错误。 想看源码的朋友给我留言。



原创粉丝点击