我快疯了,快救救我啊

ysmashimaro 2008-11-10 05:57:33
先看下代码吧。


UserBeanCl.java:

public class UserBeanCl {
private ArrayList al=new ArrayList();
private int pagesize=3;
private int pagecount=0;
private int rowcount=0;
private Connection conn=null;
private Statement sm=null;
private ResultSet rs=null;
private UserBean ub=new UserBean();

public int getPageSize()
{
return pagesize;
}

public int getPagecount()
{
try{
conn=new ConnDB().getConn();
sm=conn.createStatement();
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;

}catch(Exception e)
{
e.printStackTrace();
}finally{
this.close();
}
return pagecount;
}
public ArrayList getUsersByPage(int pagenow){
try{
conn=new ConnDB().getConn();
sm=conn.createStatement();
rs=sm.executeQuery("select * from users limit "+((pagenow-1)*pagesize)+","+pagesize);
int i=-1;
while(rs.next())
{
i++;
ub.setUserId(rs.getInt(1));
ub.setUsername(rs.getString(2));
ub.setPasswd(rs.getString(3));
ub.setEmail(rs.getString(4));
ub.setGrade(rs.getInt(5));
al.add(ub);
System.out.println(((UserBean)al.get(i)).getUserId()+"\t"+i); }
}
catch(Exception e)
{
e.printStackTrace();
}finally
{
this.close();
}
return al;
}
private void close()
{
try{
if(rs!=null){
rs.close();
rs=null;
}
if(sm!=null){
sm.close();
sm=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}
catch(Exception e)
{
e.printStackTrace();
}

}
}

Wel.jsp的片段:

<body>
<center><h1>登陆成功!</h1><br>
<%
int pagenow=1;
String getpage=request.getParameter("page");
if(getpage!=null) pagenow=Integer.parseInt(getpage);
Connection conn=new ConnDB().getConn();
Statement sm=conn.createStatement();
ResultSet rs=sm.executeQuery("select count(*) from users");
UserBeanCl ubc=new UserBeanCl();
ArrayList al=ubc.getUsersByPage(pagenow);
int pagecount=ubc.getPagecount();
int pagesize=ubc.getPageSize();
%>
<table border=1>
<tr><th>userId</th><th>username</th><th>passwd</th><th>email</th><th>grade</th></tr>
<% for(int i=0;i<al.size();i++){
UserBean ub=(UserBean)al.get(i);
System.out.println(((UserBean)al.get(i)).getUserId()+"\t"+i);
%>
<tr><td><%=ub.getUserId() %></td><td><%=ub.getUsername() %></td><td><%=ub.getPasswd() %></td><td><%=ub.getEmail() %></td><td><%=ub.getGrade() %></td></tr>
<%} %>
</table>
<%if(pagenow!=1){ %>
<a href=wel.jsp?page=<%=pagenow-1 %>>上一页</a> <%} %>
<%
for(int i=pagenow;i<=(pagecount>(pagesize+pagenow-1)?(pagesize+pagenow-1):pagecount);i++){
%>
<a href=wel.jsp?page=<%=i %>><%=i %></a> 
<%} %>
<%if(pagenow!=pagecount){ %>
<a href=wel.jsp?page=<%=pagenow+1 %>>下一页</a> <%} %>
<hr><a href="login.jsp">返回登陆界面</a></center>
</body>


这两段程序的作用是实现分页,可是功能却不正常,每页只能显示完全相同的记录。

数据是从数据库传到UserBeanCl.java,再传到wel.jsp的.我在后台打印了一些内容。在两个文

件中我都使用了System.out.println(((UserBean)al.get(i)).getUserId()+"\t"+i);

来打印记录的id属性(前)和记录的索引(后),可是结果却完全不一样。

在 UserBeanCl将结果返回给Wel.jsp之前的结果是:
1 0
2 1
3 2
而在传回结果后就变成了
3 0
3 1
3 2

当然前台也就是都显示的完全相同的记录。

而这两次打印之间只有函数返回这一个动作,难道是因为函数返回把ArrayList里面的值改变了?

还是我哪里错了?求教各位了。我都被弄得快崩溃了,大家帮忙看看吧。在下先谢过了。
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaoxiao1987918 的回复:]
典型的粗心大意!我也遇到过,呵呵!
[/Quote]
怎么又有一个紫竹啊
xiaoxiao1987918 2008-11-10
  • 打赏
  • 举报
回复
典型的粗心大意!我也遇到过,呵呵!
ruoye_2008 2008-11-10
  • 打赏
  • 举报
回复
嗯,确实,老紫竹正解。
在循环外面只要定义一个ub的变量,再在循环里创建对象
  • 打赏
  • 举报
回复
对,竹大看的很清楚啊!

在 while循环里要定义以个临时变量用来,
保存你从数据库中获取的数据。

不然就会出现你上面的情况,获取的数据相同。

楼主试试!
老紫竹 2008-11-10
  • 打赏
  • 举报
回复
            while(rs.next())
{
i++;
ub.setUserId(rs.getInt(1));
ub.setUsername(rs.getString(2));
ub.setPasswd(rs.getString(3));

又是一个典型的错误,你的 ub 所有用的都是一个,应该在循环里初始化
            while(rs.next())
{
ub = new UserBean(); // 具体哪个类我就不管了,总之你要new一下
i++;
ub.setUserId(rs.getInt(1));
ub.setUsername(rs.getString(2));
ub.setPasswd(rs.getString(3));

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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