实现分页显示数据[并按关键字查询]

时间:2022-10-28 17:02:15

前面的文章实现了分页显示,现在把分页显示的进行了整合,整合到了一个单独的页面中,加入了按关键字查询,具体实现如下:

用于实现分页和查询的页面文件:

split_page_plugin.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%
int currentPage = 1 ;// 为当前所在的页,默认在第1页
int lineSize = 3 ;// 每次显示的记录数
long allRecorders = 0 ;// 表示全部的记录数
long pageSize = 1 ;// 表示全部的页数(尾页)
int lsData[] = {1,3,5,7,9,10,15,20,25,30,50,100} ;
String keyWord = request.getParameter("kw") ;// 接收查询关键字
String url = request.getParameter("url") ;
%>
<%
try{
currentPage = Integer.parseInt(request.getParameter("cp")) ;
} catch(Exception e) {}
try{
lineSize = Integer.parseInt(request.getParameter("ls")) ;
} catch(Exception e) {}
try{
allRecorders = Long.parseLong(request.getParameter("allRecorders")) ;
} catch(Exception e) {}
if(keyWord == null){
keyWord = "" ;// 如果模糊查询没有关键字,则表示查询全部
}
%>
<%
pageSize = (allRecorders + lineSize -1) / lineSize ;
if(pageSize == 0){
pageSize = 1 ;
}
%>

<script language="javascript">
function go(num){
document.getElementById("cp").value = num ;
document.spform.submit() ;// 表单提交
}
</script>
<form name="spform" action="<%=url%>" method="post">
输入查询关键字:<input type="text" name="kw" value="<%=keyWord%>">
<input type="submit" value="查询"><br>
<input type="button" value="首页" onclick="go(1)" <%=currentPage==1?"DISABLED":""%>>
<input type="button" value="上一页" onclick="go(<%=currentPage-1%>)" <%=currentPage==1?"DISABLED":""%>>
<input type="button" value="下一页" onclick="go(<%=currentPage+1%>)" <%=currentPage==pageSize?"DISABLED":""%>>
<input type="button" value="尾页" onclick="go(<%=pageSize%>)" <%=currentPage==pageSize?"DISABLED":""%>>
跳转到第<select name="selcp" onchange="go(this.value)">
<%
for(int x=1;x<=pageSize;x++){
%>
<option value="<%=x%>" <%=x==currentPage?"SELECTED":""%>><%=x%></option>
<%
}
%>
</select>页
每页显示
<select name="ls" onchange="go(1)">
<%
for(int x=0;x<lsData.length;x++){
%>
<option value="<%=lsData[x]%>" <%=lsData[x]==lineSize?"SELECTED":""%>><%=lsData[x]%></option>
<%
}
%>
</select>

<input type="hidden" name="cp" value="1">
</form>


emp_list_true.jsp进行数据库操作和显示的页面文件:

emp_list_true.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*" %>
<html>
<head><title>雇员列表显示</title>
<style type="text/css">
<!--
.STYLE6 {font-size: 12px}
.STYLE10 {font-size: 14px; font-weight: bold; }
-->
</style>
</head>
<script language="javascript">
function changeColor(obj,color){
obj.bgColor = color ;
}
</script>
<body>
<%!
public static final String URL = "emp_list_true.jsp" ;
%>
<%!
public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORACLE" ;
public static final String DBUSER = "scott" ;
public static final String DBPASSWORD = "tiger" ;
%>
<%
Connection conn = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
%>
<%
int currentPage = 1 ;// 为当前所在的页,默认在第1页
int lineSize = 3 ;// 每次显示的记录数
int allRecorders = 0 ;// 表示全部的记录数
String keyWord = request.getParameter("kw") ;// 接收查询关键字
%>
<%
try{
currentPage = Integer.parseInt(request.getParameter("cp")) ;
} catch(Exception e) {}
try{
lineSize = Integer.parseInt(request.getParameter("ls")) ;
} catch(Exception e) {}
if(keyWord == null){
keyWord = "" ;// 如果模糊查询没有关键字,则表示查询全部
}
%>
<%
Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
String sql = "SELECT COUNT(empno) FROM emp " +
" WHERE empno LIKE ? OR ename LIKE ? OR job LIKE ? OR TO_CHAR(hiredate,'yyyy-mm-dd') LIKE ? " +
" OR sal LIKE ? OR comm LIKE ? " ;
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,"%"+keyWord+"%") ;
pstmt.setString(2,"%"+keyWord+"%") ;
pstmt.setString(3,"%"+keyWord+"%") ;
pstmt.setString(4,"%"+keyWord+"%") ;
pstmt.setString(5,"%"+keyWord+"%") ;
pstmt.setString(6,"%"+keyWord+"%") ;
rs = pstmt.executeQuery() ;
if(rs.next()){// 取得全部的记录数
allRecorders = rs.getInt(1) ;
}
%>
<center>
<h1>雇员列表</h1>
<jsp:include page="split_page_plugin.jsp">
<jsp:param name="allRecorders" value="<%=allRecorders%>"/>
<jsp:param name="url" value="<%=URL%>"/>
</jsp:include>
<%
sql = "SELECT * FROM (" +
" SELECT empno,ename,job,hiredate,sal,comm,ROWNUM rn " +
" FROM emp WHERE (empno LIKE ? OR ename LIKE ? OR job LIKE ? OR TO_CHAR(hiredate,'yyyy-mm-dd') LIKE ? OR sal LIKE ? OR comm LIKE ?) AND " +
" ROWNUM<=? ORDER BY empno) temp " +
" WHERE temp.rn>? " ;
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,"%"+keyWord+"%") ;
pstmt.setString(2,"%"+keyWord+"%") ;
pstmt.setString(3,"%"+keyWord+"%") ;
pstmt.setString(4,"%"+keyWord+"%") ;
pstmt.setString(5,"%"+keyWord+"%") ;
pstmt.setString(6,"%"+keyWord+"%") ;
pstmt.setInt(7,currentPage * lineSize) ;
pstmt.setInt(8,(currentPage-1) * lineSize) ;
rs = pstmt.executeQuery() ;
%>

<TABLE BORDER="1" cellpadding="5" cellspacing="0" bgcolor="F2F2F2" width="80%">
<TR onMouseOver="changeColor(this,'white')" onMouseOut="changeColor(this,'F2F2F2')">
<td align="center" valign="middle"><span class="STYLE10">编号</span></td>
<td align="center" valign="middle"><span class="STYLE10">姓名</span></td>
<td align="center" valign="middle"><span class="STYLE10">职位</span></td>
<td align="center" valign="middle"><span class="STYLE10">雇佣日期</span></td>
<td align="center" valign="middle"><span class="STYLE10">工资</span></td>
<td align="center" valign="middle"><span class="STYLE10">奖金</span></td>
</TR>
<%
int count = 0 ;
while(rs.next()){
count ++ ;
int empno = rs.getInt(1) ;
String ename = rs.getString(2) ;
String job = rs.getString(3) ;
Date hiredate = rs.getDate(4) ;
double sal = rs.getDouble(5) ;
double comm = rs.getDouble(6) ;
%>
<TR onMouseOver="changeColor(this,'white')" onMouseOut="changeColor(this,'F2F2F2')">
<td align="center" valign="middle"><span class="STYLE6"><%=empno%></span></td>
<td align="center" valign="middle"><span class="STYLE6"><%=ename%></span></td>
<td align="center" valign="middle"><span class="STYLE6"><%=job%></span></td>
<td align="center" valign="middle"><span class="STYLE6"><%=hiredate%></span></td>
<td align="center" valign="middle"><span class="STYLE6"><%=sal%></span></td>
<td align="center" valign="middle"><span class="STYLE6"><%=comm%></span></td>
</TR>
<%
}
%>
<%
if(count == 0){// 没有任何的数据
%>
<TR onMouseOver="changeColor(this,'white')" onMouseOut="changeColor(this,'F2F2F2')">
<td align="center" valign="middle" colspan="6"><span class="STYLE6">没有任何的查询结果!</span></td>
</TR>
<%
}
%>
</table>
<%
conn.close() ;
%>
</center>
</body>
</html>

实现分页显示数据[并按关键字查询]