求助:我的分页查询变成了个死循环

jiawulin 2012-03-23 01:03:00
程序开始运行会到PageHouse 的serviet中去开始查找第一页数据,可是到了最后把查到的集合放到request的Attribute中在跳转回去的时候,就一直查数据!就是不跳转!我真的不知道怎么会事了!
 List<House>	houseList  = houseManager.pageQueryHouse(pageIndex,pageSize);
request.setAttribute("houses", houseList);
// System.out.println(houses.get(1).getName());
request.getRequestDispatcher("page/search_list.jsp").forward(request, response);


我就查询了一次,去掉 request.setAttribute("houses", houseList);就可以正常往下走!
下面是它一直查数据的Sql
Hibernate:
select * from ( select house0_.ID as ID3_, house0_.NAME as NAME3_, house0_.USERS_ID as USERS3_3_, house0_.TYPE_ID as TYPE4_3_ from HOUSES house0_ ) where rownum <= ?
...全文
236 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiawulin 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 liuc8910 的回复:]
设个断点跟进去一步步走一遍吧,这样实在看不出来什么
[/Quote]
跟了,不跟还不知道怎么会事呢!到了 request.setAttribute("houses", houseList);就停这不动了,控制台一直刷那条SQL语句
不懂游走 2012-03-23
  • 打赏
  • 举报
回复
设个断点跟进去一步步走一遍吧,这样实在看不出来什么
jiawulin 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dryzeng 的回复:]
呃,,,这个,,,没发现什么问题啊。

你page/search_list.jsp这个页面没有自动提交或查询的功能吧?
[/Quote]
恩,没有!就是一个普通的用来显示request返回的对象
dryZeng 2012-03-23
  • 打赏
  • 举报
回复
呃,,,这个,,,没发现什么问题啊。

你page/search_list.jsp这个页面没有自动提交或查询的功能吧?
jiawulin 2012-03-23
  • 打赏
  • 举报
回复
pageQueryHouse

public List<House> pageQuery(int pageIndex,int pageSize){
List<House> houseList = null;
Session s = HibernateUtil.getSession();
Query query = s.createQuery("from House");
//第一条记录的位置
query.setFirstResult((pageIndex-1)*pageSize);
query.setMaxResults(pageSize);
houseList = query.list();
return houseList;

House

public class House {
private int id;
private String name;
private User userId;
private Type typeId;
//省略get,set
}
jiawulin 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liyantianmin 的回复:]
Java code







我用分页不是把页号作为数据记录的一项,是把数据取出来然后根据每页显示的条数计算出来有多少页,我的方法参考下吧,不知道是不是你想要的结果:
Java code

ListAction.java



package com.sy.action;

import java.util.List;

import com.opensy……
[/Quote]

我是还没写完,本来是先想看看效果,在写完的!可是。。。。
dryZeng 2012-03-23
  • 打赏
  • 举报
回复
houseManager.pageQueryHouse(pageIndex,pageSize);这里面的代码可不可以贴一下?还有House类的结构有没有嵌套?
colie_li 2012-03-23
  • 打赏
  • 举报
回复






我用分页不是把页号作为数据记录的一项,是把数据取出来然后根据每页显示的条数计算出来有多少页,我的方法参考下吧,不知道是不是你想要的结果:
Java code

ListAction.java



package com.sy.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.sy.dao.AdminDao;
import com.sy.dao.NewsDao;
import com.sy.dao.impl.AdminDaoImpl;
import com.sy.dao.impl.NewsDaoImpl;
import com.sy.vo.Admin;
import com.sy.vo.News;

public class ListAction extends ActionSupport {

private static final long serialVersionUID = 1L;
int i=1;//中间变量
private int k;//储存最大页面数
private int pageNow=1; //页码数,初始为1
private int pageSize = 5 ; //页面行数
private int intRowCount;//总行数
private int intPageCount;//总页数
private Admin admin;
private List<Admin> Adminss;
private News news;
@SuppressWarnings("unchecked")
private List<News> Newss;

private int id;
private int aid;

public News getNews() {
return news;
}

public void setNews(News news) {
this.news = news;
}

@SuppressWarnings("unchecked")
public List<News> getNewss() {
return Newss;
}
public void setNewss(List<News> newss) {
Newss = newss;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}
public Admin getAdmin() {
return admin;
}

public void setAdmin(Admin admin) {
this.admin = admin;
}

public List<Admin> getAdminss() {
return Adminss;
}

public void setAdminss(List<Admin> adminss) {
Adminss = adminss;
}
public int getAid() {
return aid;
}

public void setAid(int aid) {
this.aid = aid;
}

public int getPageNow() {
return pageNow;
}

public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getIntRowCount() {
return intRowCount;
}

public void setIntRowCount(int intRowCount) {
this.intRowCount = intRowCount;
}

public int getIntPageCount() {
return intPageCount;
}

public void setIntPageCount(int intPageCount) {
this.intPageCount = intPageCount;
}
public int getK() {
return k;
}

public void setK(int k) {
this.k = k;
}
@SuppressWarnings("unchecked")
@Override
//显示新闻列表
public String execute() throws Exception {

NewsDao npage=new NewsDaoImpl();
intRowCount=npage.count();
k=(intRowCount + pageSize - 1) / pageSize;
intPageCount = (intRowCount + pageSize - 1) / pageSize;//计算出总页数
if(pageNow<1){
pageNow=1;
}

if(pageNow > intPageCount)
pageNow=intPageCount;
i = (pageNow -1)*pageSize;
NewsDao nlist=new NewsDaoImpl();
if(null!=nlist.queryByPage(i,pageSize)){
Newss = nlist.queryByPage(i,pageSize);
return SUCCESS;
}else{
return "failure";
}
}
..
}

listNews.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
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 'index.jsp' starting page</title>
</head>
<body>


..

<center>
共<s:property value="intRowCount"/>记录  
第<s:property value="pageNow"/>页  
<s:url id="url_pre" value="list.action">
<s:param name="pageNow" value="pageNow-1"></s:param>
</s:url>

<s:url id="url_next" value="list.action">
<s:param name="pageNow" value="pageNow+1"></s:param>
</s:url>
<s:iterator value="Newss" status="status">
<s:url id="url" value="list.action">
<s:param name="pageNow" value="pageNow"/>
</s:url>
</s:iterator>
<s:if test="pageNow==1">
<s:a href="%{url_pre}">最前一页</s:a>
</s:if>
<s:else>
<s:a href="%{url_pre}">上一页</s:a>
</s:else>
<s:if test="pageNow==k">
<s:a href="%{url_next}">最后一页</s:a>
</s:if>
<s:else>
<s:a href="%{url_next}">下一页</s:a>
</s:else>
</center>
</body>
</html>

NewsDao.java

package com.sy.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import com.sy.dao.NewsDao;
import com.sy.util.DataBaseConnection;
import com.sy.util.StringUtil;
import com.sy.vo.News;

public class NewsDaoImpl implements NewsDao {


//获取分页新闻列表
@SuppressWarnings("unchecked")
public List<News> queryByPage(int i,int pageSize){
List<News> newss=new ArrayList();

PreparedStatement pstmt = null ;
String sql = null ;
ResultSet rs = null ;
DataBaseConnection dbc = null ;
dbc = new DataBaseConnection() ;

sql = "select * from struts2new order by id asc limit " + i + "," + pageSize;
try
{

pstmt = dbc.getConnection().prepareStatement(sql);

rs = pstmt.executeQuery() ;
while(rs.next())
{
News news=new News();
news.setId(rs.getInt("id"));
news.setName(rs.getString("name"));
news.setTitle(rs.getString("title"));
news.setDate(rs.getString("date"));
news.setEmail(rs.getString("email"));
news.setContent(rs.getString("content"));
i++;
newss.add(news);
}
rs.close() ;
pstmt.close() ;
}
catch(Exception e)
{
System.out.println(e) ;
}
finally
{
dbc.close();
}
return newss;
}
//查询总行数
public int count() {
int intRowCount = 0;//总行数
PreparedStatement pstmt = null ;
String sql = null ;
ResultSet rs = null ;
DataBaseConnection dbc = null ;
dbc = new DataBaseConnection() ;

sql = "select count(id) from struts2new order by id asc";
try
{
pstmt = dbc.getConnection().prepareStatement(sql);
rs = pstmt.executeQuery();
rs.next();//游标指向第一行
intRowCount=rs.getInt(1);//取得总行数
rs.close() ;
pstmt.close() ;
}
catch(Exception e)
{
System.out.println(e) ;
}
finally
{
dbc.close();
}
return intRowCount;
}
}












jiawulin 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dryzeng 的回复:]
是不是有个循环?把代码贴出来看看呢。
[/Quote]
没有
jiawulin 2012-03-23
  • 打赏
  • 举报
回复
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int pageSize=5; //页面的显示条数
int pageIndex; //当前页面
int totalrow=3; //得到总计录数
int totalPage=(totalrow%pageSize==0)?(totalrow/pageSize):(totalrow/pageSize)+1; //总页数
String current=request.getParameter("pageIndex"); //获得当前页
if(current==null||"".equals(current) )
{
pageIndex=1;
}
else{
try{
pageIndex=Integer.parseInt(current) ;
}catch(Exception e)
{
pageIndex=1;
}
}
//当前页小于零,当前也为第一页
if(pageIndex<=0)
{
pageIndex=1;
}
//当前页大于总页数,当前也就为最后一页
if(pageIndex >= totalPage)
{
pageIndex=totalPage;
}
List<House> houseList = houseManager.pageQueryHouse(pageIndex,pageSize);
request.setAttribute("houses", houseList);
// System.out.println(houses.get(1).getName());
request.getRequestDispatcher("page/search_list.jsp").forward(request, response);
dryZeng 2012-03-23
  • 打赏
  • 举报
回复
是不是有个循环?把代码贴出来看看呢。
jiawulin 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dryzeng 的回复:]
可是到了最后把查到的集合放到request的Attribute中在跳转回去的时候,就一直查数据!

这句不好理解。
[/Quote]

本来应该request.setAttribute("houses", houseList)完后就执行下面跳转的,可是它不跳转,控制台一直显示它在查数据,就是一直刷出那条SQL,一直到内存溢出
dryZeng 2012-03-23
  • 打赏
  • 举报
回复
可是到了最后把查到的集合放到request的Attribute中在跳转回去的时候,就一直查数据!

这句不好理解。
jiawulin 2012-03-23
  • 打赏
  • 举报
回复
怎么没大侠帮我看看呢·?

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧