jsp 分页(数据库读取数据)

<%@ page contentType="text/html; charset=gb2312"%>
<%@ page language="java"%>
<%@ page import="java.sql.*"%>
<%
	//驱动程序名,比较旧了,如果你用mysql5,自己改。
	String driverName = "org.gjt.mm.mysql.Driver";
	String userName = "root";//数据库用户名
	String userPasswd = "666666";//密码


	String dbName = "search";//数据库名
	String tableName = "organizations"; //表名
	//连接字符串
	String url = "jdbc:mysql://localhost/" + dbName + "?user="+ userName + "&password=" + userPasswd;
	Class.forName(driverName).newInstance();
	Connection connection = DriverManager.getConnection(url);
	Statement statement = connection.createStatement();


	//每页显示记录数
	int PageSize = 30;
	int StartRow = 0; //开始显示记录的编号 
	int PageNo = 0;//需要显示的页数
	int CounterStart = 0;//每页页码的初始值
	int CounterEnd = 0;//显示页码的最大值
	int RecordCount = 0;//总记录数;
	int MaxPage = 0;//总页数
	int PrevStart = 0;//前一页
	int NextPage = 0;//下一页
	int LastRec = 0;
	int LastStartRecord = 0;//最后一页开始显示记录的编号


	//获取需要显示的页数,由用户提交
	if (request.getParameter("PageNo") == null) { //如果为空,则表示第1页
		if (StartRow == 0) {
			PageNo = StartRow + 1; //设定为1
		}
	} else {
		PageNo = Integer.parseInt(request.getParameter("PageNo")); //获得用户提交的页数
		StartRow = (PageNo - 1) * PageSize; //获得开始显示的记录编号
	}


	//因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示
	//一定数量的页面链接


	//设置显示页码的初始值!!
	if (PageNo % PageSize == 0) {
		CounterStart = PageNo - (PageSize - 1);
	} else {
		CounterStart = PageNo - (PageNo % PageSize) + 1;
	}
	CounterEnd = CounterStart + (PageSize - 1);
%>


<html>
	<head>
		<title>分页显示记录</title>
		<link rel="stylesheet" href="style.css" type="text/css">
	</head>
	<%
		//获取总记录数
		ResultSet rs = statement.executeQuery("select count(*) from " + tableName);
		rs.next();
		RecordCount = rs.getInt(1);


		rs = statement.executeQuery("SELECT serial,name,domain FROM " + tableName + " ORDER BY serial LIMIT " + StartRow + ", " + PageSize);


		//获取总页数
		MaxPage = RecordCount % PageSize;
		if (RecordCount % PageSize == 0) {
			MaxPage = RecordCount / PageSize;
		} else {
			MaxPage = RecordCount / PageSize + 1;
		}
	%>
	<body class="UsePageBg">
		<table width="100%" border="1" class="InternalHeader">
			<tr>
				<td width="24%">
					<font size=4>分页显示记录</font>
				</td>
				<td width="76%">
					<font size=4><%="总共" + RecordCount + "条记录 - 当前页:" + PageNo + "/"+ MaxPage%></font>
				</td>
			</tr>
		</table>


		<br>
		<table width="100%" border="1" class="NormalTableTwo">
			<tr>
				<td class="InternalHeader">
					序号
				</td>
				<td class="InternalHeader">
					开办单位
				</td>
				<td class="InternalHeader">
					登录地址
				</td>
			</tr>


			<%
				int i = 1;
				while (rs.next()) {
					int bil = i + (PageNo - 1) * PageSize;
			%>
			<tr>
				<td class="NormalFieldTwo"><%=bil%></td>
				<td class="NormalFieldTwo"><%=rs.getString(2)%></td>
				<td class="NormalFieldTwo"><%=rs.getString(3)%></td>
			</tr>
			<%
				i++;
				}
			%>
		</table>
		>
		<br>
		<table width="100%" border="0" class="InternalHeader">
			<tr>
				<td>
					<div align="center">
						<%
							out.print("<font size=4>");
							//显示第一页或者前一页的链接
							//如果当前页不是第1页,则显示第一页和前一页的链接
							if (PageNo != 1) {
								PrevStart = PageNo - 1;
								out.print("<a href=search.jsp?PageNo=1>第一页 </a>: ");
								out.print("<a href=search.jsp?PageNo=" + PrevStart + ">前一页</a>");
							}
							out.print("[");


							//打印需要显示的页码
							for (int c = CounterStart; c <= CounterEnd; c++) {
								if (c < MaxPage) {
									if (c == PageNo) {
										if (c % PageSize == 0) {
											out.print(c);
										} else {
											out.print(c + " ,");
										}
									} else if (c % PageSize == 0) {
										out.print("<a href=search.jsp?PageNo=" + c + ">" + c + "</a>");
									} else {
										out.print("<a href=search.jsp?PageNo=" + c + ">" + c + "</a> ,");
									}
								} else {
									if (PageNo == MaxPage) {
										out.print(c);
										break;
									} else {
										out.print("<a href=search.jsp?PageNo=" + c + ">" + c + "</a>");
										break;
									}
								}
							}


							out.print("]");
							;


							if (PageNo < MaxPage) { //如果当前页不是最后一页,则显示下一页链接
								NextPage = PageNo + 1;
								out.print("<a href=search.jsp?PageNo=" + NextPage + ">下一页</a>");
							}


							//同时如果当前页不是最后一页,要显示最后一页的链接
							if (PageNo < MaxPage) {
								LastRec = RecordCount % PageSize;
								if (LastRec == 0) {
									LastStartRecord = RecordCount - PageSize;
								} else {
									LastStartRecord = RecordCount - LastRec;
								}


								out.print(":");
								out.print("<a href=search.jsp?PageNo=" + MaxPage + ">最后一页</a>");
							}
							out.print("</font>");
						%>
					</div>
				</td>
			</tr>
		</table>
		<%
			rs.close();
			statement.close();
			connection.close();
		%>
	</body>
</html>


你可能感兴趣的:(jsp 分页(数据库读取数据))