看看JSP中怎样实现分页(按关键字查询)显示(雇员管理)
前面的文章实现了分页显示,现在把分页显示的进行了整合,整合到了一个单独的页面中,加入了按关键字查询,具体实现如下:
用于实现分页和查询的页面文件:
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>