java web 数据库访问及传值问题

首先TeacherDaoImpl.java有这样一个方法//***查询学生列表*/publicList<UserForm>queryStuList(){List<User... 首先 TeacherDaoImpl.java 有这样一个方法
//** * 查询学生列表 */ public List<UserForm> queryStuList() { List<UserForm> stu_list=new ArrayList<UserForm>(); UserForm user=new UserForm(); String sql="select * from tb_user where level ='3' "; ResultSet rs=conn.executeQuery(sql); System.out.println("查询学生列表:"); try { while (rs.next()) { System.out.println(":"+rs.getString("id")+":"+rs.getString("username")); user.setId(rs.getString("id")); user.setUsername(rs.getString("username")); user.setSex(rs.getString("sex")); user.setBirth(rs.getString("birth")); user.setTel(rs.getString("tel")); user.setAdd(rs.getString("address")); user.setPassword(rs.getString("password")); System.out.println("。。。"+user.getId()+":"+user.getUsername()); stu_list.add(user); } } catch (SQLException e) { } return stu_list; }

然后 TeacherAction.java中有这样一个方法
/** * 获取学生信息列表 * @return */ public String stu_info() { int i=1; stuList=teacherDao.queryStuList(); System.out.println("获取学生信息列表:"+stuList.size());
for (UserForm stu : stuList) { System.out.println(i++ +":"+stu.id+":"+stu.username); } return "stulist"; }
然后下图是后台输出信息

很奇怪啊!为什么在上面的类中查出来 两个 不一样的信息,但到了 下面的类中就成一样的了

求解啊………………
展开
 我来答
reebok_1983
2014-02-22
知道答主
回答量:13
采纳率:0%
帮助的人:15.6万
展开全部
//** * 修改后的查询学生列表方法 */
public List<UserForm> queryStuList() {
List<UserForm> stu_list=new ArrayList<UserForm>();
UserForm user=null;
String sql="select * from tb_user where level ='3'空尘 ";
ResultSet rs=conn.executeQuery(sql);
System.out.println("查询学生列表:");
try {
while (rs.next()) {
System.out.println(":"+rs.getString("id")+":"+rs.getString("username"));
user=new UserForm();
user.setId(rs.getString("id"));
user.setUsername(rs.getString("username"));
user.setSex(rs.getString("sex"));
user.setBirth(rs.getString("birth"));
user.setTel(rs.getString("tel"));
user.setAdd(rs.getString("address"));
user.setPassword(rs.getString("password"));
System.out.println("。。。"+user.getId()+":"+user.getUsername());
stu_list.add(user);
}
} catch (SQLException e) {
}
return stu_list;
}

也就是说你每循环一次都应该封装一个新的对象,否则的话你只是在不断的操作同一个对象,并且这个对象中的各个属性值永远都是结果集最后一条的值,慧茄stu_list中放的也永远都是重前亏察复的对象。
Roderickzxy
2017-11-13 · TA获得超过2005个赞
知道小有建树答主
回答量:283
采纳率:0%
帮助的人:281万
展开全部

你把user定义在循环外边了。UserForm user=new UserForm(); 

你每次循环都是用同一个对象来set这个对象的字段,然后最后add到你的list里。

所以你最后return的stu_list里存的每个对象都是同一个,并且对象的各个字段信息是灶隐最后一次循环的user信息。

正确做法是,在循环外声明UserForm user = null;

然后在循环内new出对象:

while(.......){
    user = new UserForm()
 圆洞   //你的逻辑隐腔厅操作
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beauty1eg
2014-02-22 · TA获得超过243个赞
知道小有建树答主
回答量:194
采纳率:0%
帮助的人:153万
展开全部
UserForm user=new UserForm();
这句放到
while (rs.next()) {
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-02-22
展开全部
上面的方法执行了两次打印,当然输出是相同两次了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式