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"; }
然后下图是后台输出信息
很奇怪啊!为什么在上面的类中查出来 两个 不一样的信息,但到了 下面的类中就成一样的了
求解啊……………… 展开
//** * 查询学生列表 */ 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"; }
然后下图是后台输出信息
很奇怪啊!为什么在上面的类中查出来 两个 不一样的信息,但到了 下面的类中就成一样的了
求解啊……………… 展开
4个回答
展开全部
//** * 修改后的查询学生列表方法 */
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中放的也永远都是重前亏察复的对象。
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中放的也永远都是重前亏察复的对象。
展开全部
你把user定义在循环外边了。UserForm user=new UserForm();
你每次循环都是用同一个对象来set这个对象的字段,然后最后add到你的list里。
所以你最后return的stu_list里存的每个对象都是同一个,并且对象的各个字段信息是灶隐最后一次循环的user信息。
正确做法是,在循环外声明UserForm user = null;
然后在循环内new出对象:
while(.......){
user = new UserForm()
圆洞 //你的逻辑隐腔厅操作
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
UserForm user=new UserForm();
这句放到
while (rs.next()) {
里
这句放到
while (rs.next()) {
里
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-02-22
展开全部
上面的方法执行了两次打印,当然输出是相同两次了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询