大家好,我编写了一个程序,用的是分页,但是分页后,我的数据库里的数据不能正常显示,代码如下
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'wel.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head>
<body bgcolor="pink">
<br>登陆成功,恭喜!<%=request.getParameter("user") %><br>
<a href="login.jsp">返回重新登陆</a>
</body>
<h1>分页练习</h1>
<%
//pageSize 代表每页显示的数据数量
int pageSize=3;
// pageNow=1 代表当前所在页为第一页
int pageNow=1;
// pageCount 代表总共有多少页
int pageCount=0;
// rowCount 代表所要显示的数据的数量
int rowCount=0;
String s_pageNow = request.getParameter("pageNow");
if(s_pageNow!=null){
pageNow = Integer.parseInt(s_pageNow);
}
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1","sa","");
Statement sm = ct.createStatement();
ResultSet rs = sm.executeQuery("select count(*) from users");
if(rs.next()){
rowCount=rs.getInt(1);
}
if(rowCount%pageSize==0){
pageCount = rowCount/pageSize;
}else{
pageCount = rowCount/pageSize+1;
}
rs = sm.executeQuery("select top "+pageSize
+ "* from users where userId not in (select top "+pageSize*(rowCount-1)
+ "userId from users)");
// 显示
%>
<table border="1" bgcolor="#ff80c0">
<tr><td>用户id</td><td>用户名字</td><td>密码</td><td>电子邮件</td><td>级别</td></tr>
<%
while(rs.next()){
%>
<tr><td><%=rs.getInt(1)%></td><td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td><td><%=rs.getString(4)%></td>
<td><%=rs.getInt(5)%></td></tr>
<%
}
%>
</table>
<%
if(pageNow!=1){
out.println("<a href=wel.jsp?pageNow=1>首页</a>");
out.println("<a href=wel.jsp?pageNow="+(pageNow-1)+">上一页</a>");
}
for(int i=1;i<=pageCount;i++){
out.println("<a href=wel.jsp?pageNow="+i+">["+i+"]</a>");
}
if(pageNow!=pageCount){
out.println("<a href=wel.jsp?pageNow="+(pageNow+1)+">下一页</a>");
out.println("<a href=wel.jsp?pageNow="+pageCount+">末页</a>");
}
%>
</html>
程序没有任何错误提示,执行完以后,<%
while(rs.next()){
%>
<tr><td><%=rs.getInt(1)%></td><td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td><td><%=rs.getString(4)%></td>
<td><%=rs.getInt(5)%></td></tr>
<%
}
%>
这段代码好像执行不了,请大家帮我看看,那里出错了, 在线等待,谢谢大家
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'wel.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head>
<body bgcolor="pink">
<br>登陆成功,恭喜!<%=request.getParameter("user") %><br>
<a href="login.jsp">返回重新登陆</a>
</body>
<h1>分页练习</h1>
<%
//pageSize 代表每页显示的数据数量
int pageSize=3;
// pageNow=1 代表当前所在页为第一页
int pageNow=1;
// pageCount 代表总共有多少页
int pageCount=0;
// rowCount 代表所要显示的数据的数量
int rowCount=0;
String s_pageNow = request.getParameter("pageNow");
if(s_pageNow!=null){
pageNow = Integer.parseInt(s_pageNow);
}
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1","sa","");
Statement sm = ct.createStatement();
ResultSet rs = sm.executeQuery("select count(*) from users");
if(rs.next()){
rowCount=rs.getInt(1);
}
if(rowCount%pageSize==0){
pageCount = rowCount/pageSize;
}else{
pageCount = rowCount/pageSize+1;
}
rs = sm.executeQuery("select top "+pageSize
+ "* from users where userId not in (select top "+pageSize*(rowCount-1)
+ "userId from users)");
// 显示
%>
<table border="1" bgcolor="#ff80c0">
<tr><td>用户id</td><td>用户名字</td><td>密码</td><td>电子邮件</td><td>级别</td></tr>
<%
while(rs.next()){
%>
<tr><td><%=rs.getInt(1)%></td><td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td><td><%=rs.getString(4)%></td>
<td><%=rs.getInt(5)%></td></tr>
<%
}
%>
</table>
<%
if(pageNow!=1){
out.println("<a href=wel.jsp?pageNow=1>首页</a>");
out.println("<a href=wel.jsp?pageNow="+(pageNow-1)+">上一页</a>");
}
for(int i=1;i<=pageCount;i++){
out.println("<a href=wel.jsp?pageNow="+i+">["+i+"]</a>");
}
if(pageNow!=pageCount){
out.println("<a href=wel.jsp?pageNow="+(pageNow+1)+">下一页</a>");
out.println("<a href=wel.jsp?pageNow="+pageCount+">末页</a>");
}
%>
</html>
程序没有任何错误提示,执行完以后,<%
while(rs.next()){
%>
<tr><td><%=rs.getInt(1)%></td><td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td><td><%=rs.getString(4)%></td>
<td><%=rs.getInt(5)%></td></tr>
<%
}
%>
这段代码好像执行不了,请大家帮我看看,那里出错了, 在线等待,谢谢大家
上面的语句改为:
ResultSet rs = sm.executeQuery("select * from users"); 因为select count(*) 只是返回一个记录, 而你想要返回一行记录.
再有就是:
rs = sm.executeQuery("select top "+pageSize
+ "* from users where userId not in (select top "+pageSize*(rowCount-1)
+ "userId from users)");
两个ResultSet 语句共用一个局部变量,你想是不是有问题?不知道我的回复对你有没有用? 有用的话给我加分.
select Top (每页显示的条数) * from (表名) where (主键) not in(select top "+(第几页-1)*(每页显示的条数)+" (主键) from (表名)
首先谢谢你的回复,我的问题昨天我解决了,是后面rs = sm.executeQuery("select top "+pageSize
+ "* from users where userId not in (select top "+pageSize*(rowCount-1)
+ "userId from users)");
这个里面错误了,这里的pageSize*(rowCount-1) 里面的rowCount 应该改为pageNow