servlet获取session中的值,为什么获取用户id时每次得到的都是id=0(数据库中为1),其他的字段没问题!

使用jsp+servlet+dao 设计模式

接口:UserDao.java

public interface UserDao {
public boolean getUser(User user);
public void changePassword(User user,int id);
}

接口的实现:UserDaoJdbcImpl.java

public class UserDaoJdbcImpl implements UserDao {

@Override
public boolean getUser(User user) {
boolean flag = false;
List list=null;
String sql="select id,username,password from users where username=? and password=?";
String params[] = { user.getUsername(),user.getPassword()};

try {
QueryRunner qr = Dbc.getQueryRunner();
list = (List) qr.query(sql, new BeanListHandler(User.class),params);
if(list.size()>0){
flag=true;
user = (User) list.get(0);
}

} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
}
return flag;
}

@Override
public void changePassword(User u,int id) {
String sql="update users set password=? where id="+id;
try {
System.out.println("id是"+id);
System.out.println(u.getPassword());
QueryRunner qr = Dbc.getQueryRunner();
qr.update(sql, u.getPassword());
System.out.println("555555");
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
}
}

}

第1个回答  2011-05-24
问题严重的我都不想讲了。你getUser这个方法设计的简直不是失败能形容的了。你是不是在想,我传进去一个user,在这个方法里面,如果找到了,就把这个传过来的user指向找到的user。如果是的话,大哥,那原来的那个user,还是你新建出来的。跟你这个到数据库中找出来的没关系。唉。。。
你可以这样改啊。
public User getUser(String username,String password) {
User user = null;
List list=null;
String sql="select id,username,password from users where username=? and password=?";
String params[] = { username,password};

try {
QueryRunner qr = Dbc.getQueryRunner();
list = (List) qr.query(sql, new BeanListHandler(User.class),params);
if(list.size()>0){
user = (User) list.get(0);
}

} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
}
return user;
}

然后在该用这个方法的地方,你完全可以判断返回回来的user是不是null,来判断你传过去的username和password是不是能找到user.明白了不?本回答被提问者采纳
第2个回答  2018-07-01
大兄弟你好了吗。我也是这问题
相似回答