jsp分页查询

以前没有使用过,所有查询的数据全部显示在一个页面,现在急着用只好临时抱佛脚,求教诸位大神了。我现在只是知道jsp分页显示的话,一般有两种,一是在数据库中提取数据时就使用了... 以前没有使用过,所有查询的数据全部显示在一个页面,现在急着用只好临时抱佛脚,求教诸位大神了。
我现在只是知道jsp分页显示的话,一般有两种,一是在数据库中提取数据时就使用了限制,诸如Mysql的limit等。另一种是将全部结果一次性从数据库中取出放在一个结果集里,再分页显示。貌似前者比较主流,但是我以前写的方法都是直接显示全部数据的,所以我想采用后一种方法,不知道哪位有范例可以借鉴一下。另外如果我使用前一种方法的话,那么我要在jsp页面上显示:一共有XXX条数据,XXX页,现在是第XXX页。这样的话我岂不是也要一开始就查询一遍数据库才知道数据库中有多少条数据啊。
我自己的想法是我把数据库里的数据一次性全部取出来放在一个list中,然后分页显示就是 (假设每页显示10条)for(int i=page*10;i<(page+1)*10;i++){
list.get(i);}这样,请问这样做是不是比较低级啊?因为我在网上看的方法基本上都是前一种方法。
不知道哪位有这样的例子,或者其他的方法也可以。
展开
 我来答
百度网友0f492e7
推荐于2016-08-20
知道答主
回答量:27
采纳率:100%
帮助的人:7.4万
展开全部
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>分页显示</title>
</head>
<body>
<center>
<h1>人员列表</h1>
<hr>
<br>
<%--
程序可以进行关键字查询的分页
--%>
<%
// 进行乱码处理
request.setCharacterEncoding("GB2312") ;
%>
<%!
final String jspUrl = "list_person_false_06.jsp" ;
%>
<%
// 定义如下分页变量
// 1、定义没页要显示的记录数
int lineSize = 10 ;
// 2、定义一个当前是第几页
int currentPage = 1 ;
// 计算出总页数
int pageSize = 0 ;
// 总记录数 / 每页显示的记录数
int allRecorders = 30 ;
// 加入查询关键字变量
String keyWord = null ;
%>
<%
// 接收查询关键字
keyWord = request.getParameter("kw") ;
// 接收传过来的当前页
try
{
currentPage = Integer.parseInt(request.getParameter("cp")) ;
}
catch(Exception e)
{}
%>
<%
final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
final String DBURL = "jdbc:mysql://localhost/mldn" ;
final String DBUSER = "root" ;
final String DBPASSWORD = "mysqladmin" ;
Connection conn = null ;
%>
<%
try
{
Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
PreparedStatement pstmt = null ;
String sql = null ;
if(keyWord==null)
{
// 如果为空则没有查询,表示查询出全部
sql = "SELECT COUNT(id) from person" ;
}
else
{
sql = "SELECT COUNT(id) from person WHERE uid LIKE ? OR name LIKE ?" ;
}
pstmt = conn.prepareStatement(sql) ;
// 如果有查询关键字,则进行设置
if(keyWord!=null)
{
pstmt.setString(1,"%"+keyWord+"%") ;
pstmt.setString(2,"%"+keyWord+"%") ;
}
ResultSet rs = pstmt.executeQuery() ;
if(rs.next())
{
allRecorders = rs.getInt(1) ;
}
rs.close() ;
pstmt.close() ;

// 计算总页数
pageSize = (allRecorders+lineSize-1)/lineSize ;
if(keyWord==null)
{
sql = "SELECT id,uid,name,password FROM person" ;
}
else
{
sql = "SELECT id,uid,name,password FROM person WHERE uid LIKE ? OR name LIKE ?" ;
}
pstmt = conn.prepareStatement(sql) ;
if(keyWord!=null)
{
pstmt.setString(1,"%"+keyWord+"%") ;
pstmt.setString(2,"%"+keyWord+"%") ;
}
rs = pstmt.executeQuery() ;
%>
<script language="javaScript">
function openPage(curpage)
{
document.spage.cp.value = curpage ;
// alert(cupage) ;
document.spage.submit() ;
}
function selOpenPage()
{
document.spage.cp.value = document.spage.selpage.value ;
document.spage.submit() ;
}
</script>
<form name="spage" action="<%=jspUrl%>">
输入查询关键字:<input type="text" name="kw" value="<%=keyWord==null?"":keyWord%>">
<input type="submit" value="查询">
<%
if(allRecorders>0)
{
%>
<br>
<br>
<input type="button" value="首页" onClick="openPage(1)" <%=currentPage==1?"disabled":""%>>
<input type="button" value="上一页" onClick="openPage(<%=currentPage-1%>)" <%=currentPage==1?"disabled":""%>>
<input type="button" value="下一页" onClick="openPage(<%=currentPage+1%>)" <%=currentPage==pageSize?"disabled":""%>>
<input type="button" value="尾页" onClick="openPage(<%=pageSize%>)" <%=currentPage==pageSize?"disabled":""%>>
<input type="hidden" name="cp" value="">
<font color="red" size="5"><%=currentPage%></font>
/
<font color="red" size="5"><%=pageSize%></font>
跳转到
<select name="selpage" onChange="selOpenPage()">
<%
for(int x=1;x<=pageSize;x++)
{
%>
<option value="<%=x%>" <%=currentPage==x?"selected":""%>><%=x%></option>
<%
}
%>
</select>

<%
}
%>
</form>
<table border="1" width="80%">
<tr>
<td>编号</td>
<td>登陆名称</td>
<td>姓名</td>
<td>密码</td>
<td colspan="2">操作</td>
</tr>
<%
int i = 0 ;
for(int x=0;x<(currentPage-1)*lineSize;x++)
{
rs.next();
}
// 对于输出代码之前要求按显示的页数空出
for(int x=0;x<lineSize;x++)
{
if(rs.next())
{
i++ ;
int id = rs.getInt(1) ;
String userid = rs.getString(2) ;
String name = rs.getString(3) ;
String password = rs.getString(4) ;
%>
<tr>
<td><%=id%></td>
<td><%=userid%></td>
<td><%=name%></td>
<td><%=password%></td>
<td>更新</td>
<td>删除</td>
</tr>
<%
}
}
rs.close() ;
pstmt.close() ;
if(i==0)
{
%>
<tr>
<td colspan="6">没有任何数据!!</td>
</tr>
<%
}
%>
</table>
<%
}
catch(Exception e)
{
%>
<h2>系统出错!!!</h2>
<%
}
finally
{
conn.close() ;
}
%>
</center>
</body>
</html>
自己看看吧,数据库自己建咯!
魍魉MIC
2012-05-14 · TA获得超过287个赞
知道小有建树答主
回答量:443
采纳率:0%
帮助的人:272万
展开全部
是这样的。我也不是很清楚。我的做法是:
limit
然后返回来的是结果集,resultSet 里面有相关的方法。可以获取。他有多少记录。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
薄琛l3
2012-05-14 · TA获得超过366个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:131万
展开全部
前一种数据准确性更高,也比较安全!你所想的第二种也是可以的。
例子的话 找不到了,你只要把你的当前页获得,基本上就行了...
就按你那个for循环完全没问题的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyj1281103
2012-05-14
知道答主
回答量:6
采纳率:0%
帮助的人:9537
展开全部
这个问题是复杂的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式