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();
}
后面的get和set方法自己加上。
3、Control层(就是写个类从数据库获取相应的数据)
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>
好了,分页查询和显示的核心代码我都贴出来,真心地欢迎大侠们支出其中的不足和错误。 想看源码的朋友给我留言。
- jsp分页查询与显示,一只纯菜鸟的角度....
- JSP通用查询处理与分页显示
- JSP通用查询处理与分页显示
- JSP分页显示查询结果
- jsp分页显示查询结果
- jsp查询数据库分页显示
- jsp分页查询及显示
- JSP分页,查询结果分页显示
- jsp+MySQL的查询结果分页显示[实例]
- 关于JSP查询数据库显示分页
- 高效的jsp分页查询
- 高效的jsp分页查询
- 高效的jsp分页查询
- 高效的jsp分页查询
- 高效的jsp分页查询
- 高效的jsp分页查询
- 高效的jsp分页查询
- 高效的jsp分页查询
- hdu 1292递归
- asp.net和jsp的比较
- 学习 严蔚敏讲数据结构笔记26
- Delphi里的时间函数
- C++实现全排列(调用next_permutation)
- jsp分页查询与显示,一只纯菜鸟的角度....
- 学习 严蔚敏讲数据结构笔记27
- ActionContext和ServletActionContext小结
- 文件逻辑结构、外存分配和空闲空间管理
- 软件项目进度延期关键因素和应对措施
- arm开发板的一些文件的说明
- 信号量与互斥锁
- 学习 严蔚敏讲数据结构笔记28
- java前台线程和后台线程